【问题标题】:UITapGestureRecognizer doubletap still triggers singletap actionUITapGestureRecognizer doubletap 仍然触发 singletap 动作
【发布时间】:2020-06-24 04:27:03
【问题描述】:

我有一个带有单击和双击识别器的 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 类

【问题讨论】:

  • 显示test方法
  • 嗨@jawadAli,我的测试方法工作正常,只是当我双击时我的单击仍然被触发,这意味着 singleTapGesture.require(toFail: doubleTapGesture) 并没有真正起作用跨度>
  • 你的代码也适用于我,不管有没有最后两行。

标签: ios swift uiview


【解决方案1】:

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

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() {
        
    }

【讨论】:

  • 我的双击工作正常,即使我双击也调用了我的单击
【解决方案2】:

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

singleTapGesture.delaysTouchesBegan = true
doubleTapGesture.delaysTouchesBegan = true

【讨论】:

  • 嗨,我已经删除了这些行,但是当我双击时,我的单击仍然触发
  • 您确定这些是您要添加到此视图中的唯一与手势相关的代码吗?在新项目中仅使用此代码进行尝试,您的代码将正常工作。
猜你喜欢
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多