2017-08-25 22 views
1
class viewcontroller1: UIViewController { 

我有這兩個圖像。點擊下一個按鈕後,10秒後image1變爲image2。但是,如果在10秒過期之前再次單擊下一個按鈕,我不知道如何取消/重置延遲動作。這是我到目前爲止的代碼...如果在執行延遲時間之前點擊觸發它的同一按鈕,我該如何取消延遲動作?

var image1: UIImageView! 
var image2: UIImageView! 

func delay(_ delay:Double, closure:@escaping()->()) { 
let when = DispatchTime.now() + delay 
DispatchQueue.main.asyncAfter(deadline: when, execute: closure) 
} 

@IBAction func nextbutton(_ sender: Any) { 

image1.image = UIImage(named: "image1") 
delay(10) { self.image2.image = UIImage(named: "image2") 
} 
} 
}  

我真的很感激任何幫助。由於

+0

每次使用定時器和重置定時器時,動作調用爲 –

+0

由於您正在使用'anyncAfter',因此無法取消操作。正如邁克所說,使用'定時器',您可以通過'invalidate'取消 – Paulw11

回答

0

anyncAfter無法取消

按你必須使用Timer下面的評論是例如

創建全局變量

var timer:Timer? 

和行動

@IBAction func btnImageChangedTapped(_ sender: UIButton) { 
    if (self.timer != nil) { 
     self.timer?.invalidate() 
     self.timer = nil; 
    } 
    timer = Timer.scheduledTimer(timeInterval: yourTime, target: self, selector: #selector(changeImage:), userInfo: sender, repeats: false) 
} 
+0

感謝您的迴應,我試圖使用這個,但我不確定如何將圖像更改添加到代碼中,我試過... timer = Timer .scheduledTimer(timeInterval:10,target:self,selector:#selector(image1.image = UIImage(named:「image1」)),userInfo:sender,repeats:false) –

+0

您需要創建'changeImage'方法,它會在10秒後執行,並改變圖像 –

+0

@ N.Senior它是否適合你? –

0

ü可以試試這個

var timer:Timer?

func startTimer(){ 
    timer = Timer.scheduledTimer(timeInterval: 10.0, target: self, selector: #selector(self.YourImageChangeAction), userInfo: nil, repeats: false) 
} 

func resetTimer(){ 

    timer?.invalidate() 
    startTimer() 
} 

將func resetTimer添加到您的UiButton發件人。

0

您可以在VC中使用點擊計數器並在執行延遲代碼時對其進行測試。

例如:

var clickCount = 0 
@IBAction func nextbutton(_ sender: Any) 
{ 
    clickCount += 1 
    let wantsClickCount = clickCount 
    image1.image = UIImage(named: "image1") 
    delay(10) 
    { 
    guard self.clickCount == wantsClickCount 
    else { return } 
    self.image2.image = UIImage(named: "image2") 
    } 
} 

如果按鈕再次關閉之前執行點擊,使用clickCount將不再匹配,並且定時代碼不會做任何事情。

這甚至可以非常快速地點擊。請注意,它會每次將圖像變化推遲10秒,因此圖像變化總是會在最後一次點擊後10秒發生。