斯威夫特:暂停和恢复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
值的新计时器。
伟大的方式来实现这个!不过,我遇到了startTime问题。它说我打印它时有一些很大的数字。基本上不是正确的开始时间。 – OriginalAlchemist
我再次实现了这个方法,但是我的计时器关闭了,它的速度太快了。如果明确的11秒没有出现,它将在31时降至20。 – OriginalAlchemist
您在startTime中看到的数字将是一个巨大的数字。这是自2001年1月1日以来的秒数。将您的代码(包括它所在的方法)添加到问题的底部,并描述发生了什么问题。 –