Ios UIgestureRecognitor识别订单问题
我有一个红色视图和一个绿色视图(绿色视图是红色视图的一个子视图),并且我在每个视图中添加了一个手势识别器 两个GrestureRecogniter的Ios UIgestureRecognitor识别订单问题,ios,uikit,uigesturerecognizer,Ios,Uikit,Uigesturerecognizer,我有一个红色视图和一个绿色视图(绿色视图是红色视图的一个子视图),并且我在每个视图中添加了一个手势识别器 两个GrestureRecogniter的应该同时识别,并返回YES 但是,当我点击绿色视图时,首先调用红色视图的手势委托方法shouldlogenerationsympollywith 因为我认为命中测试视图应该是绿色视图。因此,绿色视图的应该与同时识别,应该是第一个 iOS如何决定哪个grestureRecognizer应该首先重新认证 发布代码并打印日志: class GreenVi
应该同时识别,并返回YES
但是,当我点击绿色视图时,首先调用红色视图的手势委托方法shouldlogenerationsympollywith
因为我认为命中测试视图应该是绿色视图。因此,绿色视图的应该与同时识别,应该是第一个
iOS如何决定哪个grestureRecognizer应该首先重新认证
发布代码并打印日志:
class GreenView: UIView,UIGestureRecognizerDelegate{
override func awakeFromNib() {
let gesture = UITapGestureRecognizer(target: self, action: #selector(greenTap))
gesture.delegate = self
self.addGestureRecognizer(gesture)
}
@objc func greenTap(){
print("greenTap")
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
print("greenTap shouldRecognizeSimultaneouslyWith")
return true
}
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
print("green gestureRecognizerShouldBegin")
return super.gestureRecognizerShouldBegin(gestureRecognizer)
}
}
class RedView: UIView,UIGestureRecognizerDelegate{
override func awakeFromNib() {
let gesture = UITapGestureRecognizer(target: self, action: #selector(redTap))
gesture.delegate = self
self.addGestureRecognizer(gesture)
}
@objc func redTap(){
print("redTap")
}
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
print("redTap gestureRecognizerShouldBegin")
return super.gestureRecognizerShouldBegin(gestureRecognizer)
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
print("redTap shouldRecognizeSimultaneouslyWith")
return true
}
}
这些指纹是:
我们可以看到,在绿色视图(子视图)的方法不将绿色视图添加为红色视图的子视图之前,应该同时识别红色视图(超级视图)并调用action方法。只需将绿色视图添加到其上方的红色视图之外,并将约束置于红色视图的中心即可应为这两个视图启用用户交互。因此,当点击绿色视图时,它肯定会调用绿色视图的方法。请发布您尝试过的代码。谢谢@Mahendra,我已经添加了代码和日志,您可以看到,在绿色视图(子视图)的方法hanks之前,redview(superview)的应该同时识别和操作方法被调用,但事实上,我的目的是想弄清楚是什么让这种奇怪的呼叫顺序发生?我实际上需要在红色和绿色视图中同时识别should。
green gestureRecognizerShouldBegin
redTap gestureRecognizerShouldBegin
green gestureRecognizerShouldBegin
redTap shouldRecognizeSimultaneouslyWith
greenTap shouldRecognizeSimultaneouslyWith
redTap
greenTap