[objective-c]scrollViewDidScroll︰ 当以编程方式滚动?

标签: ios Objective-C
发布时间: 2016/10/4 5:25:14
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有这个打算时用他的手指滚动的用户执行的委托︰

-(void)scrollViewDidScroll:(UIScrollView *)scrollView

我有滚动代码开始与这行︰

[scroller scrollRectToVisible:CGRectMake(0, 0,scroller.frame.size.width,scroller.frame.size.height) animated:YES];

当我执行下面这行代码来以编程方式滚动时,也被称为第一次委托。 为消除这从发生 !

我试图将委托设置为零,但它仍执行委托︰

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;

编辑︰

我读了这个伟大的答案︰以编程方式设置 contentOffset 触发 scrollViewDidScroll ,但似乎他的解决办法 (第一个) 是不包含动画,而我需要那个动画。

解决方法 1:

可能有更好的解决方案,但这应该工作︰

声明一个布尔值,在您.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;
}
官方微信
官方QQ群
31647020