我想做的是。
我现在拥有的是,
显然,同一个scrollViewDidEndDragging代码在两个地方重复,我如何将代码放在一个地方并共享它?
以下是我要为我的scrollView和tableView
分享的代码#import "OverlayTableViewController.h"
@interface OverlayTableViewController()
{
CADisplayLink *_displayLink;
}
@end
@implementation OverlayTableViewController
-(void)scrollViewWillBeginDragging:(UIScrollView*)scrollView
{
[self startDisplayLinkIfNeeded];
}
- (void)scrollViewDidEndDragging:(UIScrollView*)scrollView willDecelerate:(BOOL)decelerate
{
if(!decelerate)
[self stopDisplayLink];
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
[self stopDisplayLink];
}
- (void)startDisplayLinkIfNeeded
{
if(!_displayLink)
{
_displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(display)];
[_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:UITrackingRunLoopMode];
}
}
- (void)stopDisplayLink
{
[_displayLink invalidate];
_displayLink = nil;
}
- (void)display
{
//
}
@end
答案 0 :(得分:0)
我认为最好的方法是将所有常见的委托逻辑放到新的东西中,称之为CommonScrollViewDelegate。它可能需要一个属性,如displayLinkTarget和任何其他属于使用它的类的属性。
这些类中的任何一个都可以像这样设置它们的滚动委托:
CommonScrollViewDelegate *commonDelegate = [[CommonScrollViewDelegate alloc] init];
commonDelegate.displayLinkTarget = self; // or add this to the init method if you want
myScrollView.delegate = commonDelegate;
然后您在CommonScrollViewDelegate中的代码保持基本相同,只需进行一些小调整:
@property(strong, nonatomic) id displayLinkTarget;
// etc.
@synthesize displayLinkTarget = _displayLinkTarget;
- (void)startDisplayLinkIfNeeded
{
if(!_displayLink)
{
_displayLink = [CADisplayLink displayLinkWithTarget:self.displayLinkTarget
selector:@selector(display)];
[_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:UITrackingRunLoopMode];
}
}