斯威夫特:暂停和恢复NSTimer

问题描述:

我知道这已经发布之前,但我是新来的迅速,我想找到我的情况帮助。 所以我需要运行一个计时器,当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 
} 

感谢您的帮助,您可以提供!

简短的回答:不能。定时器不能被暂停。

相反,你需要记录当前时间,当你启动定时器:

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日以来的秒数。将您的代码(包括它所在的方法)添加到问题的底部,并描述发生了什么问题。 –