You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用UITapGestureRecognizer识别区分单击与双击手势

核心问题

你当前的代码混淆了UITapGestureRecognizer的两个属性:

  • numberOfTouchesRequired:触发手势需要的手指触摸数量,比如2代表需要两根手指同时点击
  • numberOfTapsRequired:触发手势需要的点击次数,你需要用这个属性判断单击/双击

正确实现方案

方案1:分别创建两个手势识别器(推荐)

这种方式逻辑更清晰,也能避免手势冲突:

  1. 先配置双击手势
let doubleTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(doubleTapAction))
doubleTapRecognizer.numberOfTapsRequired = 2
view.addGestureRecognizer(doubleTapRecognizer)
  1. 再配置单击手势,额外添加依赖避免手势冲突
let singleTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(singleTapAction))
singleTapRecognizer.numberOfTapsRequired = 1
// 关键配置:只有双击识别失败时,才触发单击手势,避免双击时同时触发单击
singleTapRecognizer.require(toFail: doubleTapRecognizer)
view.addGestureRecognizer(singleTapRecognizer)
  1. 实现对应的触发方法
@objc func doubleTapAction() {
    print("Double")
}

@objc func singleTapAction() {
    print("single")
}

方案2:单手势回调内判断(不推荐)

如果你坚持要在同一个手势的回调中判断,需要修改判断条件:

if gestureRecognizer.numberOfTapsRequired == 2 {
    print("Double")
} else {
    print("single")
}

注意:这种方式无法解决单击和双击的触发冲突,优先选方案1

内容的提问来源于stack exchange,提问作者ASN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:45:03