2017-04-19 63 views
4

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

+0

您尝试过touchesBegan:方法 – ankit

+0

您可能想要在包含当前视图的视图上添加tapGesture。 – Larme

+0

我这样做:https://stackoverflow.com/a/48790850/7132300 – algrid

回答

0

您可以使用UIGestureRecognizerDelegate协议

extension YourViewController: UIGestureRecognizerDelegate { 

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

当触摸是在后台的看法,但“假”,如果它是你的视图内这将仅返回“真”。

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

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

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

,你所要做的是,在的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") 
     } 
    } 

希望它有助于!

相关问题