我正在尝试创建一个倒计时x分钟和y秒的计时器.
我正在计算秒数并创建InterfaceTimer,如下所示:
timer.setDate(NSDate(timeIntervalSinceNow:Double(secondsValue 1)))
timer.stop()
我正在计算秒数并创建InterfaceTimer,如下所示:
timer.setDate(NSDate(timeIntervalSinceNow:Double(secondsValue 1)))
timer.stop()
在那之后我一直停下来并一次又一次地启动它,但是随着“时间(现在)不停止”,值突然减少.
例如:如果计时器显示:55,我启动它3秒并停止它,它显示:52,我等待10秒然后再次启动它,它从42开始.
我无法保存当前在WKInterfaceTimer中的值,因此我可以从同一点重新开始.我试过的一切都行不通.有没有人使用计时器,它停止后保持相同的值?
解决方法
是的,Watchkit计时器有点……笨拙……绝对不是很直观.但那只是我的个人意见
每次用户选择恢复计时器时,您都必须继续设置日期/计时器.
请记住,您还需要一个内部NSTimer来跟踪事物,因为当前的WatchKit计时器只是用于显示而没有附加任何真正的逻辑.
也许这样的事情……它不优雅.但它的确有效
@IBOutlet weak var WKTimer: WKInterfaceTimer! //watchkit timer that the user will see var myTimer : NSTimer? //internal timer to keep track var isPaused = false //flag to determine if it is paused or not var elapsedTime : NSTimeInterval = 0.0 //time that has passed between pause/resume var startTime = NSDate() var duration : NSTimeInterval = 45.0 //arbitrary number. 45 seconds override func willActivate(){ super.willActivate() myTimer = NSTimer.scheduledTimerWithTimeInterval(duration,target: self,selector: Selector("timerDone"),userInfo: nil,repeats: false) WKTimer.setDate(NSDate(timeIntervalSinceNow: duration )) WKTimer.start() } @IBAction func pauseResumePressed() { //timer is paused. so unpause it and resume countdown if isPaused{ isPaused = false myTimer = NSTimer.scheduledTimerWithTimeInterval(duration - elapsedTime,repeats: false) WKTimer.setDate(NSDate(timeIntervalSinceNow: duration - elapsedTime)) WKTimer.start() startTime = NSDate() pauseResumeButton.setTitle("Pause") } //pause the timer else{ isPaused = true //get how much time has passed before they paused it let paused = NSDate() elapsedTime += paused.timeIntervalSinceDate(startTime) //stop watchkit timer on the screen WKTimer.stop() //stop the ticking of the internal timer myTimer!.invalidate() //do whatever UI changes you need to pauseResumeButton.setTitle("Resume") } } func timerDone(){ //timer done counting down }