UIScrollView - 告诉setContentOffset和手动滚动之间的区别

时间:2012-06-15 05:40:16

标签: ios uiscrollview touchesbegan touchesmoved

我有一个滚动视图,每3秒自动前进到下一个“页面”(也使用页面控件)。但是,一旦用户触摸了滚动视图,我想停止自动前进。

我已经将scrollview子类化了。我可以在子类中检测touchesBegan,但是没有调用touchesMoved,所以我无法判断用户是否手动刷过了scrollview。我不能使用scrollviewDidScroll,因为当我在自动前进计时器触发时设置contentOffset时会调用它。

那么我检测触摸的其他选择是什么?为什么不在scrollview子类上调用touchesMoved?

3 个答案:

答案 0 :(得分:7)

感谢您的建议。他们帮助我偶然发现了这个简单的解决方案:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [self.scrollTimer invalidate];
}

答案 1 :(得分:2)

您可能需要查看以下委托方法:

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView

Per Apple:

  

滚动视图在其UIScrollView和setContentOffset的实现结束时调用此方法:animated:和scrollRectToVisible:animated:methods,但仅在请求动画时才会调用。

因此只有在编程滚动发生时才会调用委托方法。您可以在该方法中设置自动滚动调用,仅在某些BOOL为false时调用它。在触摸事件中将BOOL设置为true。

或完全不同的东西=]

虽然这是一个有用的委托方法。

〜祝你好运

答案 2 :(得分:0)

scrollview可能会提名一个子视图来接收触摸输入 - UIKit对象对这类事情非常挑剔,通常甚至无法处理转发的事件。

你可能想做的是键值观察trackingdragging(听起来你想要后者)。如果相关属性更改为true,则表示用户已启动滚动。

相关问题