如何使UIScrollView忽略单个触摸?

时间:2012-06-13 07:40:19

标签: ios uiscrollview uiresponder

我在另一个UIScrollView内有一个UIScrollView。外部滚动视图处理分页,内部滚动视图处理缩放(它是具有缩放支持的图像库)。我需要内部滚动视图忽略单个触摸,以便它们转到外部滚动视图。

这可以使用[innerScrollView setUserInteractionEnabled:NO]来完成,但这显然也会关闭内部滚动视图上的捏合和平移手势。有没有办法保持内部缩放视图处理的捏合和平移手势,并将所有其他事件转发到响应链?

PS。我总能带着一些代表团来解决这个问题。我想知道是否有一种简单的方法可以让它使用常规的响应链。

2 个答案:

答案 0 :(得分:3)

我发现:单击事件最终会在内部滚动视图内的内容视图中显示touchesBegan:withEvent:。此内容视图未实现该方法,默认UIView实现将事件传递给响应者链。这里我们有内部滚动视图, 实现touchesBegan:withEvent:。这种实现吞下了单击,响应者链没有任何东西上升。有助于子类化UIScrollView并手动向响应者链发送触摸:

- (void) touchesBegan: (NSSet*) touches withEvent: (UIEvent*) event
{
    [[self nextResponder] touchesBegan:touches withEvent:event];
}

当然,以这种方式至少转发touchesEnded:withEvent:也是一件好事。这就是我需要的一切。内部滚动视图可以处理缩放和平移,外部滚动视图接收单击事件。我甚至可以放大,然后平移到右边,我转到下一页。

答案 1 :(得分:2)

在iOS 5上,UIScrollViews展示了他们的panGestureRecognizerpinchGestureRecognizer

因此,如果您不需要支持较旧的iOS版本,则可以尝试innerScrollView.panGestureRecognizer.minimumNumberOfTouches = 2

编辑:这不起作用; scrollView仍然吞下了触摸。我将把它留在这里以供进一步参考。

如果您不希望内部scrollView完全处理平移,您可能(我还没有尝试过)只需删除它的panGestureRecognizer。