识别视图中的滑动手势而不是子视图

Posted

技术标签:

【中文标题】识别视图中的滑动手势而不是子视图【英文标题】:Recognize swipe gesture in view not in subview 【发布时间】:2015-05-13 13:32:54 【问题描述】:

我在视图控制器的视图中添加了一个子视图。这个子视图是 QLPreviewController 的视图。

我想要实现的是识别子视图上的滑动手势父视图,即视图控制器的视图。最后,我希望能够在视图上向左/向右滑动以加载下一个文档进行预览。

我知道命中测试,并理解仅将手势识别器附加到父视图,这些将不会被识别,因为 子视图 将是“命中测试”视图。

现在识别这些手势的最佳(或最简单)方法是什么? 注意:我没有设法将手势识别器附加到子视图,这似乎不起作用。

* 更新 *

为了更清楚,这是我的 ViewController 中的代码。 vContent 只是我的 ViewController 中的一个视图,我在其中添加了 QLPreviewController 的视图:

let pvVc = QLPreviewController()
pvVc.dataSource = self

vContent.addSubview(pvVc.view)

我尝试将滑动识别器添加到 vContent 和 pvVc.view。在这两种情况下都没有触发任何事件。

let sgrLeft: UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action:Selector("handleSwipe:"))
sgrLeft.direction = UISwipeGestureRecognizerDirection.Left
sgrLeft.delegate = self

在其他一些视图中,代码运行良好。

感谢任何提示! 谢谢 淡香水

【问题讨论】:

你没有设法将手势附加到子视图是什么意思?什么不起作用? 另外,最好只有一个 Swift/Objective-C 标签,这样人们可以根据您的需要给您答案。 在您的情况下,委托将是很好的解决方案。从子视图处理父视图中的所有手势动作。 好的,谢谢,我添加了更多细节并删除了一个标签 【参考方案1】:

嗯,响应者链,未知的动物…… ;-)

您可以继承父视图并覆盖-hitTest:forEvent:

你很少需要自己调用这个方法,但是你可以重写它来隐藏子视图的触摸事件。

【讨论】:

好的,我需要自己处理 touchesBegin/End 吗?最后,我只想处理向左/向右滑动并传递其他事件,因为 QLPreviewController 的视图需要处理例如预览文档的滚动 不,您可以简单地返回 self 而不是将消息发送到子视图。【参考方案2】:

手势识别器首先获得识别触摸的机会,因此即使子视图也是 hitTest 视图。 superView上附加的gestureRecognizer可以识别触摸事件。

【讨论】:

以上是关于识别视图中的滑动手势而不是子视图的主要内容,如果未能解决你的问题,请参考以下文章

在 CustomView 中为视图而不是子视图点击手势识别器

将向上滑动手势识别器添加到模态视图

识别 UIView 中的滑动手势以使用手势识别器滚动滚动视图

如何将手势识别器从一个视图传递到另一个视图

在使用手势识别器添加子视图时遇到 UI 故障问题

从一个视图控制器访问一组图像到另一个视图控制器,以添加滑动手势识别器