如何使用UITapGestureRecognizer识别区分单击与双击手势
核心问题
你当前的代码混淆了UITapGestureRecognizer的两个属性:
numberOfTouchesRequired:触发手势需要的手指触摸数量,比如2代表需要两根手指同时点击numberOfTapsRequired:触发手势需要的点击次数,你需要用这个属性判断单击/双击
正确实现方案
方案1:分别创建两个手势识别器(推荐)
这种方式逻辑更清晰,也能避免手势冲突:
- 先配置双击手势
let doubleTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(doubleTapAction)) doubleTapRecognizer.numberOfTapsRequired = 2 view.addGestureRecognizer(doubleTapRecognizer)
- 再配置单击手势,额外添加依赖避免手势冲突
let singleTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(singleTapAction)) singleTapRecognizer.numberOfTapsRequired = 1 // 关键配置:只有双击识别失败时,才触发单击手势,避免双击时同时触发单击 singleTapRecognizer.require(toFail: doubleTapRecognizer) view.addGestureRecognizer(singleTapRecognizer)
- 实现对应的触发方法
@objc func doubleTapAction() { print("Double") } @objc func singleTapAction() { print("single") }
方案2:单手势回调内判断(不推荐)
如果你坚持要在同一个手势的回调中判断,需要修改判断条件:
if gestureRecognizer.numberOfTapsRequired == 2 { print("Double") } else { print("single") }
注意:这种方式无法解决单击和双击的触发冲突,优先选方案1
内容的提问来源于stack exchange,提问作者ASN
相关产品推荐
相关产品推荐

