UIGestureRecognizer识别订单问题

我有一个红色视图和一个绿色视图(绿色视图是redview的子视图),并且向每个视图添加了一个actionRecognizer。

UIGestureRecognizer识别订单问题

并且grestureRecognizer的shouldRecognizeSimultaneouslyWith都返回YES。

但是,当我点击绿色视图时,将首先调用redview的手势委托方法shouldRecognizeSimultaneouslyWith

因为我认为点击测试视图应该是绿色视图。因此绿色视图的shouldRecognizeSimultaneouslyWith应该是第一个。

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,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
    }
}

印刷品是:

green gestureRecognizerShouldBegin
redTap gestureRecognizerShouldBegin
green gestureRecognizerShouldBegin
redTap shouldRecognizeSimultaneouslyWith
greenTap shouldRecognizeSimultaneouslyWith
redTap
greenTap

,我们可以看到,在greenview(subview)的方法之前,调用了redview(superview)的shouldRecognizeWithWith和action方法

wduke8818 回答:UIGestureRecognizer识别订单问题

不要将绿色视图添加为红色视图的子视图。只需将绿色视图添加到红色视图上方,然后将约束居中到红色视图

本文链接:https://www.f2er.com/3052274.html

大家都在问