【发布时间】:2016-09-17 00:37:01
【问题描述】:
我有一个简单的设置:有 2 个兄弟UIViews A 和 B,B 完全覆盖 A(但它是透明的,所以 A 是可见的):
┌──────────────────┐
│ View A │
│ │
│ ┌──────────────┴───┐
│ │ View B │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
└───┤ │
│ │
│ │
└──────────────────┘
我需要 2 个不同的 UIGestureRecognizers:A 应该有一个水龙头识别器,B 应该有一个平移识别器。每当我点击 B 时,它应该传递触摸事件以查看 A 后面,以便它可以识别点击(我将使用一些逻辑来了解是否接受平移,如距离、起始区域等)。这可以在 iOS 中实现吗?
到目前为止,我的经验是,一旦 B 接受触摸,它就永远不会将其转发给后面的 A。接受或不接受的决定应立即在覆盖的pointInside 或hitTest 函数中完成。然而,在我的例子中,这个决定是基于一些逻辑的,并且取决于用户交互的上下文和历史。
【问题讨论】:
-
根据响应者链,它会将事件转发到下一个视图(或下一个级别),如果它没有被顶部对象处理,但如果它被顶部对象处理,那么它不会通过到下一个层次。因此,在您的情况下,如果视图 B 正在响应触摸事件,它不会将触摸传递给视图 A,但是如果您在视图 B 中强行阻止触摸事件,则响应者链会将触摸事件传递给视图 A。希望对您有所帮助
标签: ios objective-c uiview uigesturerecognizer