检测当前视图外的任何水龙头

时间:2017-04-19 11:46:14

标签: ios swift uigesturerecognizer

有没有办法检测当前视图外的任何水龙头?我没有尝试用hitTest方法实现某些功能,但我不确定是否理解它。

2 个答案:

答案 0 :(得分:10)

您需要做的是,在 touchesBegan 中,您必须从触摸设置中获取第一个触摸对象,并且您必须检查该触摸的位置视图(在其中您想要检测触摸)。

在View中获取触摸位置后,您必须检查 currentView (您必须检查点击是在内部还是外部的视图)。

如果currentView的框架包含触摸位置,则表示在视图内部发生了触摸,否则在外部。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        let touch = touches.first
        guard let location = touch?.location(in: self.view) else { return }
        if !currentView.frame.contains(location) {
            print("Tapped outside the view")
        }else {
            print("Tapped inside the view")
        }
    }

希望它有帮助!

答案 1 :(得分:7)

您可以使用UIGestureRecognizerDelegate协议

    extension YourViewController: UIGestureRecognizerDelegate {

      func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
                             shouldReceive touch: UITouch) -> Bool {
        return (touch.view === self.view)
      } 
    }

当触摸在背景视图上时,此选项仅返回“true”,如果视图位于视图内,则返回“false”。

注意:身份运算符===将touch.view与self.view进行比较。您想知道两个变量是否都引用同一个对象。

在viewDidLoad()中,您将创建gestureRecognizer并设置委托。

let gestureRecognizer = UITapGestureRecognizer(target: self,action: #selector(yourActionMethod))
gestureRecognizer.cancelsTouchesInView = false
gestureRecognizer.delegate = self
view.addGestureRecognizer(gestureRecognizer)