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