如何快速知道点击是在视图内还是在视图外

Posted

技术标签:

【中文标题】如何快速知道点击是在视图内还是在视图外【英文标题】:How to know that whether a tap is inside a view or outside in swift 【发布时间】:2017-01-16 10:48:27 【问题描述】:

我正在尝试开发代码部分,以检查我的水龙头是在视图内还是在视图外,我尝试使用 pointInside 方法。如果 A 是主视图控制器,B 是 A 的子视图,我怎样才能知道用户在 B 中点击了。

【问题讨论】:

【参考方案1】:

Apple 在Responder Chain 中很好地解释了这一点。您可以将以下功能添加到您的视图控制器:

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) 
    if let firstTouch = touches.first 
        let hitView = self.view.hitTest(firstTouch.location(in: self.view), with: event)

        if hitView === viewB 
            print("touch is inside")
         else 
            print("touch is outside")
        
    

【讨论】:

调用中的参数“with”缺少参数。我没听懂。 我们需要设置一些委托吗?因为它没有被解雇。 if hitView != viewB print("is outside the view") 也许会对某人有所帮助)【参考方案2】:

tapGestureRecognizer 回调中,您可以使用tapGesture.location(in: A) 方法来获取A 推荐系统的x、y 位置。然后你可以使用B.frame.contains(location)

如果为真,则水龙头在 B 中。

根据您要执行的操作,可以使用更简单的方法来解决问题。例如,如果您只对 B 内部的触摸感兴趣,可以将 gestureRecognizer 添加到 B 而不是 A。

我不知道哪些正是您的需求。有了更多信息,我可以给你更好的建议。

【讨论】:

如果用这个方法使用:convertPoint: fromView: 真的很有用。

以上是关于如何快速知道点击是在视图内还是在视图外的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 布局(Layout)基础

在Arcgis中,在数据视图模式下能看到地图数据,切换到布局视图怎么看不到数据了???

如何通过按表格视图外的按钮来清空表格视图内的单元格数据?

ArcGIS参考线如何调到需要的位置

如何使用 scruffy 和 rails

微信小程序 IP白名单是指外网IP还是内网IP呢?如:192.168.2.144还是外网的IP?