2017-07-25 96 views
0

等待執行我所試圖實現:取消DispatchWorkItem在DispatchQueue

我想這取決於如果用戶在touchesBegan方法一次或兩次點擊屏幕來執行兩個不同的任務。

在這樣做的過程中,我延遲執行singleTapTask 0.3秒,以便能夠取消屬於doubleTapTaskDispatchWorkItem


我的方法:

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首先被執行,將非常感謝您的幫助:)

+0

爲什麼(指同時敲擊數)抽頭數你沒有使用UIGestureTapRecognizer? –

+0

我想只想要屏幕的某個部分有資格獲得單/雙觸摸識別,但我可能最終會這樣做@NikitaGaydukov – Devapploper

+0

看看這個答案:https://stackoverflow.com/questions/9346315/uigesturerecognizer換部分的-A-的UIView。它將幫助您限制可點擊區域。 –

回答

2

一個簡單的方法,因爲這將是加2 UITapGestureRecognizer到您的視圖(singleTapGestureRecognizerdoubleTapGestureRecognizer)我無法弄清楚。

第一個配置爲singleTapGestureRecognizer.numberOfTapsRequired = 1,第二個配置爲doubleTapGestureRecognizer.numberOfTapsRequired = 2

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

而且,你們的做法上面,你的目標不是連續的單,雙水龍頭,但在一個水龍頭