我有这个代表,当用户用手指滚动时,它将被执行:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
我有这行用代码滚动到开头:
[scroller scrollRectToVisible:CGRectMake(0, 0,scroller.frame.size.width,scroller.frame.size.height) animated:YES];
当我执行这行代码以编程方式滚动时,第一个委托也被调用。 我希望消除这种情况。
我试图将委托设置为nil,但它仍然执行委托:
scroller.delegate=nil;//to not excute scrolldidscroll
[scroller scrollRectToVisible:CGRectMake(0, 0,scroller.frame.size.width,scroller.frame.size.height) animated:YES];
scroller.delegate=self;
编辑:
我已经阅读了这个很棒的答案:Setting contentOffset programmatically triggers scrollViewDidScroll但似乎他的解决方案(第一个)没有动画,而我需要那个动画。
答案 0 :(得分:7)
可能有更好的解决方案,但这应该有效:
在.h
中声明一个布尔值@property(nonatomic,assign) BOOL scrollingProgrammatically;
在你的.m:
self.scrollingProgrammatically = YES;
[scroller scrollRectToVisible:CGRectMake(0, 0,scroller.frame.size.width,scroller.frame.size.height) animated:YES];
...
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
if(!self.scrollingProgrammatically){
...
}
}
-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{
self.scrollingProgrammatically = NO;
}