我有一个滚动视图,每3秒自动前进到下一个“页面”(也使用页面控件)。但是,一旦用户触摸了滚动视图,我想停止自动前进。
我已经将scrollview子类化了。我可以在子类中检测touchesBegan,但是没有调用touchesMoved,所以我无法判断用户是否手动刷过了scrollview。我不能使用scrollviewDidScroll,因为当我在自动前进计时器触发时设置contentOffset时会调用它。
那么我检测触摸的其他选择是什么?为什么不在scrollview子类上调用touchesMoved?
答案 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对象对这类事情非常挑剔,通常甚至无法处理转发的事件。
你可能想做的是键值观察tracking
或dragging
(听起来你想要后者)。如果相关属性更改为true,则表示用户已启动滚动。