Чего я пытаюсь достичь:
Я пытаюсь выполнить две разные задачи в зависимости от того, коснулся ли пользователь экрана один или два раза в методе touchesBegan
.
В процессе этого я задерживаю выполнение singleTapTask
на 0,3 с, чтобы иметь возможность отменить DispatchWorkItem
, принадлежащий 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
было отменено. Я не могу понять, почему singleTapTask
выполняется в первую очередь, и был бы очень признателен за вашу помощь :)