取消其他视图的触摸事件
Posted
技术标签:
【中文标题】取消其他视图的触摸事件【英文标题】:Cancel touch events for other views 【发布时间】:2019-03-08 13:14:22 【问题描述】:我有一个UIView
subclass
,它在camera preview
(AR
,但不是ARKit
)之上显示一些内容。在这个视图中,我使用touchesBegan
和touchesEnded
来检测用户是否按下了显示的对象。现在我在UINavigationController
内的controller
中有这个视图embedded
,并且这个NavigationController
启用了在点击时显示/隐藏栏。我想这样做,如果我检测到对ARView
内的对象的点击,那么我可以执行一些操作,但是NavigationController
不会接收到触摸,因此只有当我点击背景时,条才会隐藏。在这种情况下,如何进一步阻止发送触摸事件?
【问题讨论】:
【参考方案1】:所以,如果我对您的理解正确,您想识别这两个事件,并调用这两个手势的方法,对吗?如果是这样,试试这个代码sn-p:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool
return true
此方法允许识别多种手势
【讨论】:
并不总是这样。现在它已经以这种方式工作了 - 我在我的子视图中检测到 touchesEnded 并且导航控制器上的 Bars 都隐藏了。如果我的子视图触摸位于子视图的特殊位置,我希望能够以某种方式阻止这些条隐藏。我没有实现 NavigationController 的触摸,这些是由 SDK 完成的,我只是在情节提要中选择了一些选项。总之,我希望能够将触摸限制在我的子视图中,但并非总是如此——只有在检测到触摸后我才决定这样做。另外我不使用 GestureRecognizers,只是 touchesBegan 和 touchesEnded。 实际上我认为我可以重新设计我的代码以使用手势识别器,然后这可能会起作用。谢谢。【参考方案2】:如果您希望限制对不同视图的触摸,您可以根据您喜欢的每个条件更改userInteractionEnabled
的属性。
当此属性设置为 false 时,将不会接收所选视图的触摸事件。
【讨论】:
以上是关于取消其他视图的触摸事件的主要内容,如果未能解决你的问题,请参考以下文章
Swift:在自定义视图中未调用 UIButton 触摸事件