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

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

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

在View中获取触摸位置后,您必须检查当前的View(您必须检查是否在内部或外部的视图)。

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

override func touchesBegan(_ touches: Set, 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") } } 

希望能帮助到你!

您可以使用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)