我想要实现的目标:
我正在尝试执行两项不同的任务,具体取决于用户是否在touchesBegan
方法中点击了屏幕一次或两次。
在执行此操作的过程中,我将singleTapTask
的执行时间推迟0.3秒,以便取消属于DispatchWorkItem
的{{1}}。
我的方法:
doubleTapTask
问题:
出于某种原因,override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let singleTapTask = DispatchWorkItem {
// single tap
}
let doubleTapTask = DispatchWorkItem {
// double tap
}
if touch.tapCount == 1 {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3, execute: singleTapTask)
} else if touch.tapCount == 2 {
singleTapTask.cancel()
DispatchQueue.main.async(execute: doubleTapTask)
}
}
}
仍然与singleTapTask
一起执行,即使doubleTapTask
已被取消。
我无法弄清楚为什么singleTapTask
首先执行,并非常感谢您的帮助:)
答案 0 :(得分:2)
一种简单的方法是在视图中添加2 UITapGestureRecognizer
(singleTapGestureRecognizer
和doubleTapGestureRecognizer
)。
第一个配置了singleTapGestureRecognizer.numberOfTapsRequired = 1
,第二个配置了doubleTapGestureRecognizer.numberOfTapsRequired = 2
。
现在添加singleTapGestureRecognizer.require(toFail: singleTapGestureRecognizer)
此外,根据您的上述方法,您不是针对顺序单击和双击,而是一次点击时的点击数(同时点击手指的数量)