gpt4 book ai didi

ios - 取消在 DispatchQueue 中等待执行的 DispatchWorkItem

转载 作者:行者123 更新时间:2023-11-28 12:19:41 32 4
gpt4 key购买 nike

我想要实现的目标:

我正在尝试执行两个不同的任务,具体取决于用户是在 touchesBegan 方法中点击屏幕一次还是两次。

在这样做的过程中,我将 singleTapTask 的执行延迟 0.3 秒,以便能够取消属于 doubleTapTask< 的 DispatchWorkItem/.


我的方法:

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 已被取消,singleTapTask 仍会与 doubleTapTask 一起执行。我不明白为什么首先要执行 singleTapTask,非常感谢您的帮助:)

最佳答案

一个简单的方法是向您的 View 添加 2 个 UITapGestureRecognizer(singleTapGestureRecognizerdoubleTapGestureRecognizer)。

第一个配置为 singleTapGestureRecognizer.numberOfTapsRequired = 1,第二个配置为 doubleTapGestureRecognizer.numberOfTapsRequired = 2

现在添加singleTapGestureRecognizer.require(toFail: singleTapGestureRecognizer)

此外,使用上述方法,您的目标不是连续单击和双击,而是一次单击的次数(同时敲击的手指数)

关于ios - 取消在 DispatchQueue 中等待执行的 DispatchWorkItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45312086/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com