我有一个主视图和主视图的 4 个 subview ,它们都有自己的 UITapGestureRecognizer,当我点击一个 subview 时,如何触发两个 View 。下面的例子,
如果我点击 subview 1 所需的日志将是:
subview1 is clicked
MainView is clicked
我的代码
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let mainGesture = UITapGestureRecognizer(target: self, action: #selector(mainGestureActivated))
self.view.addGestureRecognizer(mainGesture)
let subGesture = UITapGestureRecognizer(target: self, action: #selector(subViewGestureActivated))
self.subview1.addGestureRecognizer(subGesture)
}
@objc func mainGestureActivated(){
print("MainView Clicked")
}
@objc func subViewGestureActivated(){
print("Subview Clicked")
}
它只打印被点击的 subview !是否有可能同时触发两个 gestureRecognizers,因为 main 正在封装其他。
最佳答案
首先你应该在你的VC中符合UIGestureRecognizerDelegate
,然后实现shouldRecognizeSimultaneouslyWith
的委托(delegate)函数。在函数内部,你应该检测 gestureRecognizer
和 otherGestureRecognizer
是否是你想要的,如果是,你应该让它们同时工作,
符合委托(delegate),并在
viewDidLoad
之外声明手势识别器(因为稍后您需要在委托(delegate)方法中访问它们。)var mainGestureRecognizer = UITapGestureRecognizer() var subGestureRecognizer = UITapGestureRecognizer()
初始化您的识别器,并将您的 VC 设置为它们的委托(delegate):
mainGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(mainGestureActivated)) subGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(subViewGestureActivated)) mainGestureRecognizer.delegate = self subGestureRecognizer.delegate = self
实现上面提到的delegate函数,实现subView和mainView的同时识别:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { if gestureRecognizer == subGestureRecognizer && otherGestureRecognizer == mainGestureRecognizer { return true } return false }
如果您希望它适用于 4 个不同的 subview ,那么您应该检查委托(delegate)方法中的 else if 语句。
关于ios - 从重叠 View 触发 UITapGestureRecognizers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53987529/