iOS-シングルクリック、ダブルタップのジェスチャ競合解決(Swift)

コードに直接移動します。コードにコメントがあります
。最初の記述方法

  ///手势
    lazy var tapGestureRecognizer: UITapGestureRecognizer = {
    
    
        let tap = UITapGestureRecognizer(target: self, action: #selector(tapAction(tap:)))
        return tap
    }()
   ///上次点击时的时间
    var lastTapTime:TimeInterval = 0
    override func viewDidLoad() {
    
    
        super.viewDidLoad()
        view.backgroundColor = .gray
        self.view.addGestureRecognizer(tapGestureRecognizer)
    }
    @objc func tapAction(tap:UITapGestureRecognizer) {
    
    
        let point = tap.location(in: self.view)
        print(point)
        let time = Date(timeIntervalSinceNow: 0).timeIntervalSince1970
        if time - lastTapTime > 0.25 {
    
    //单击
            //延迟执行 0.25秒
            self.perform(#selector(sigleTapAction), with: nil, afterDelay: 0.25)
        }else {
    
    //双击
            //取消performSelector方法注册过的方法,就是说当上面这个方法正在运行,比如希望0.25秒钟之后执行某一个方法,但是没到0.25秒钟的情况下取消performSelector
            NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(sigleTapAction), object: nil)
            print("双击手势")
        }
        lastTapTime = time
    }
    //Mark: 单击操作
    @objc func sigleTapAction() {
    
    
       print("单击手势")
    }

2番目の書き方

     ///手势 单击
    lazy var tapGestureRecognizer: UITapGestureRecognizer = {
    
    
        let tap = UITapGestureRecognizer(target: self, action: #selector(tapAction(tap:)))
        tap.numberOfTapsRequired = 1
        return tap
    }()
    ///手势 双击
    lazy var tapGestureRecognizer2: UITapGestureRecognizer = {
    
    
        let tap = UITapGestureRecognizer(target: self, action: #selector(tapAction2(tap:)))
        tap.numberOfTapsRequired = 2
        return tap
    }()
    override func viewDidLoad() {
    
    
        super.viewDidLoad()
        view.backgroundColor = .gray
        tapGestureRecognizer.require(toFail: tapGestureRecognizer2) //这句很关键
        self.view.addGestureRecognizer(tapGestureRecognizer)
        self.view.addGestureRecognizer(tapGestureRecognizer2)
    }
    @objc func tapAction(tap:UITapGestureRecognizer) {
    
    
         print("单击---手势")
    }
    @objc func tapAction2(tap:UITapGestureRecognizer) {
    
    
        print("双击---手势")
    }
   

おすすめ

転載: blog.csdn.net/weixin_43259805/article/details/123232858