视图手势处理:检测大视图上的手势,大视图是小视图的子视图

Posted

技术标签:

【中文标题】视图手势处理:检测大视图上的手势,大视图是小视图的子视图【英文标题】:View gesture handling: Detecting gestures on a big view which is a subview of a small view 【发布时间】:2014-11-10 21:05:47 【问题描述】:

我对 UIView 上的手势处理感到困惑,

假设视图层次结构中有三个视图。

如下图所示:

V1 (Grey) 
 | 
 + V2 (Orange)
    |
    + V3 (Red)

每个视图都有一个附加的点击手势,

V1 有手势1

V2 有手势 2

V3 有手势 3

V3 太大,超出 V2 范围。

下图显示了响应的手势。

我的问题是部分 V3 的手势超出了 V2:

为什么响应的是 g1 而不是 g3?以及如何让g3响应?

注意:我也设置了v3.userInteractionEnabled = true,不起作用

【问题讨论】:

【参考方案1】:

您无法接收超出视图范围的事件。你的橙色视图不会收到事件;因此,它不会将事件传递给您的红色视图。

为了完成此操作,您需要使用将橙色视图和红色视图分组但足够大以容纳两者的公共父级来更正视图层次结构,或者只需将手势识别器附加到灰色超级视图然后将您的触摸位置与您的视图边界进行比较。

【讨论】:

以上是关于视图手势处理:检测大视图上的手势,大视图是小视图的子视图的主要内容,如果未能解决你的问题,请参考以下文章

为捏合手势设置 UIScrollView 的原点

UIScrollView 并检测其子视图的手势

如何在弹出视图上识别手势而不中断下方视图上的手势识别?

检测 GeometryReader SwiftUI 背景上的点击手势

如何检测哪个视图正在平移手势 Swift

ios 滑动手势在子视图上未被识别,父视图上的手势