我有一个滚动视图,它每 3 秒自动前进到下一个“页面”(也使用了页面控件)。但是,一旦用户触摸滚动视图,我想停止自动前进。
我已经对滚动视图进行了子类化。我可以在子类中检测到touchesBegan,但是没有调用touchesMoved,所以我无法判断用户是否手动滑动了滚动视图。我不能使用 scrollviewDidScroll,因为当我在自动提前计时器触发时设置 contentOffset 时会调用它。
那么检测触摸的其他选择是什么?为什么不在滚动视图子类上调用 touchesMoved?
我有一个滚动视图,它每 3 秒自动前进到下一个“页面”(也使用了页面控件)。但是,一旦用户触摸滚动视图,我想停止自动前进。
我已经对滚动视图进行了子类化。我可以在子类中检测到touchesBegan,但是没有调用touchesMoved,所以我无法判断用户是否手动滑动了滚动视图。我不能使用 scrollviewDidScroll,因为当我在自动提前计时器触发时设置 contentOffset 时会调用它。
那么检测触摸的其他选择是什么?为什么不在滚动视图子类上调用 touchesMoved?
感谢您的建议。他们帮助我偶然发现了这个简单的解决方案:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self.scrollTimer invalidate];
}
您可能需要查看以下委托方法:
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
每个苹果:
滚动视图在 UIScrollView 和 setContentOffset:animated: 和 scrollRectToVisible:animated: 方法的实现结束时调用此方法,但仅在请求动画时才调用。
因此,仅在发生程序滚动时才调用该委托方法。您可以在该方法中设置自动滚动调用,仅在某些 BOOL 为 false 时调用它。在您的触摸事件中将该 BOOL 设置为 true。
或者完全不同的东西=]
虽然它是一个有用的委托方法。
~ 祝你好运
滚动视图可能会指定一个子视图来接收触摸输入——UIKit 对象对这类事情非常挑剔,通常甚至无法处理转发事件。
您可能想要做的是键值观察tracking或dragging(听起来您想要后者)。如果相关属性更改为 true,则您知道用户已启动滚动。