我有一个包含各种UIGestureRecognizer
的复杂视图层次结构。
然后,我呈现一个覆盖UIView
,如果用户与该覆盖交互,我确实不希望任何放置在该覆盖下方的手势识别器启动。例如,当前,拖动会导致手势识别器在要触发的覆盖视图下触发。
我希望避免任何导致潜在意大利面条代码的解决方案(例如,在视图层次结构中迭代并禁用手势识别器)。
类似问题:
- 需要在iOS的覆盖视图中屏蔽除特定触摸之外的所有触摸
- 如何禁用除最顶部视图之外的所有视图的触摸输入
我能想到的唯一一种干净的解决方案是在覆盖视图上添加所有类型的手势识别器,这样这些识别器就会被触发,而不是下面的识别器。
例如:
overlayView.addGestureRecognizer(UIPanGestureRecognizer(target: nil, action: nil))
overlayView.addGestureRecognizer(UILongPressGestureRecognizer(target: nil, action: nil))
overlayView.addGestureRecognizer(UISwipeGestureRecognizer(target: nil, action: nil))