7

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

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

那么检测触摸的其他选择是什么?为什么不在滚动视图子类上调用 touchesMoved?

4

3 回答 3

7

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

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [self.scrollTimer invalidate];
}
于 2012-06-15T15:51:05.470 回答
2

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

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView

每个苹果:

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

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

或者完全不同的东西=]

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

~ 祝你好运

于 2012-06-15T05:55:12.503 回答
1

滚动视图可能会指定一个子视图来接收触摸输入——UIKit 对象对这类事情非常挑剔,通常甚至无法处理转发事件。

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

于 2012-06-15T05:46:54.683 回答