use*_*567 7 uigesturerecognizer ios swift
有没有办法检测当前视图外的任何水龙头?我试图用hitTest方法实现某些功能但未成功,但我不确定是否理解它.
Age*_*ith 14
您需要做的是,在touchesBegan中,您必须从触摸设置中获取第一个触摸对象,并且您必须在视图中检查该触摸的位置(您要在其中检测触摸).
当您在搜索得到触摸的位置,你必须检查你是否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")
}
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
您可以使用UIGestureRecognizerDelegate协议
extension YourViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
shouldReceive touch: UITouch) -> Bool {
return (touch.view === self.view)
}
}
Run Code Online (Sandbox Code Playgroud)
当触摸在背景视图上时,此选项仅返回"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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8309 次 |
| 最近记录: |