2016-03-05 64 views
0

我知道這已經發布之前,但我是新來的迅速,我想找到我的情況幫助。 所以我需要運行一個計時器,當stopMusic()被調用時(我的應用程序的某處),我需要暫停計時器,然後在調用playMusic()時,我需要恢復計時器。斯威夫特:暫停和恢復NSTimer

這裏是我有:

override func viewDidLoad() { 

runFirstDropTimer = NSTimer.scheduledTimerWithTimeInterval(38.2, target: self, selector: "runAnimation", userInfo: nil, repeats: false) 

} 

func stopMusic() { 
//Pause Timer 
} 

func playMusic() { 
//Resume Timer 
} 

感謝您的幫助,您可以提供!

回答

3

簡短的回答:不能。定時器不能被暫停。

相反,你需要記錄當前時間,當你啓動定時器:

let startTime = NSDate.timeIntervalSinceReferenceDate() 
let interval = 38.2 
//Start your timer 
runFirstDropTimer = NSTimer.scheduledTimerWithTimeInterval(interval, 
    target: self, 
    selector: "runAnimation", 
    userInfo: nil, 
    repeats: false) 

然後,當你想暫停計時器,使它無效並找出多少時間留給:

runFirstDropTimer.invalidate() 
let elapsed = NSDate.timeIntervalSinceReferenceDate() - startTime 
let remaining = interval - elapsed 

最後,當您想恢復您的計時器時,請創建一個具有remaining值的新計時器。

+0

偉大的方式來實現這個!不過,我遇到了startTime問題。它說我打印它時有一些很大的數字。基本上不是正確的開始時間。 – OriginalAlchemist

+0

我再次實現了這個方法,但是我的計時器關閉了,它的速度太快了。如果明確的11秒沒有出現,它將在31時降至20。 – OriginalAlchemist

+0

您在startTime中看到的數字將是一個巨大的數字。這是自2001年1月1日以來的秒數。將您的代碼(包括它所在的方法)添加到問題的底部,並描述發生了什麼問題。 –