UITapGestureRecognizer doubletap 仍然会触发 singletap 动作

UITapGestureRecognizer doubletap still triggers singletap action

我有一个带有单击和双击识别器的 UIView,但当然有不同的操作。单击识别器运行良好,但双击识别器仍然调用并触发单击...

下面是我的实现:-

    let singleTapGesture = UITapGestureRecognizer(target: self, action: #selector(toggleIsVisible))
    singleTapGesture.numberOfTapsRequired = 1
    self.addGestureRecognizer(singleTapGesture)

    let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(test))
    doubleTapGesture.numberOfTapsRequired = 2
    self.addGestureRecognizer(doubleTapGesture)

    singleTapGesture.require(toFail: doubleTapGesture)
    singleTapGesture.delaysTouchesBegan = true
    doubleTapGesture.delaysTouchesBegan = true

注意:“self”是一个 UIView class

你也可以这样实现...为你的单击添加延迟以检查它是否双击..如果双击则取消单击的性能..简单的方法

var tapCount = 0
    func tapGestureRecognizer() {
        tapCount += 1
        switch (tapCount)
        {
        case 1: //single tap
            self.perform(#selector(singleTap), with: nil, afterDelay: 0.2)
        case 2: //double tap
            
            
            NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(singleTap), object: nil)
            
            doubleTap()
            break;
        default:
            break;
        }
        if (tapCount>2){
            tapCount = 0
        }
    }
    
    
    @objc func singleTap(){
        
    }
    
    @objc func doubleTap() {
        
    }

您的代码应该可以正常工作,而不会触发 doubleTap 事件的 singleTap 手势。那么为什么singleTap事件手势会触发doubleTap事件呢?您确定这些是您要添加的唯一手势吗?确保您没有添加任何其他可能改变手势事件的自定义。您不需要这些行:

singleTapGesture.delaysTouchesBegan = true
doubleTapGesture.delaysTouchesBegan = true