2015-07-19 37 views
1

我希望看到我的程序知道計時器何時完成。我在Xcode 7 Beta 3(7A152u)中使用WKInterfaceTimer。計數器倒計時時,「Tick Tock」會打印到控制檯。但是當它達到0時,「定時器完成」不打印。當WKInterfaceTimer達到0時打印到控制檯

@IBOutlet var myTimer: WKInterfaceTimer! 

    @IBAction func startButton() { 
     myTimer.start() 
     myTimer.setDate(NSDate(timeIntervalSinceNow: 4)) // Arbitrary 4 second coundown. 

     // Impliment an alert. 
     if myTimer == 0 { 
      print("Timer Done") 

     } else { 
     print("Tick Tock") 

    } 
} 
+0

對於初學者,您在'else'語句末尾丟失了一個大括號。 – aaplmath

+0

來自WKInterfaceTimer文檔:*「要知道計時器何時到達0,請配置與您用於設置計時器的目標日期相同的NSTimer對象」* –

回答

0

你做了什麼是錯的。在您致電setDate後,計時器開始倒計時。要獲得信息什麼是計時器的實際狀態,您應該實例化NSTimer並檢查它何時觸發。

Apple's Documentation

要知道當定時器到達0,與你用來設置定時器相同的目標日期配置一個NSTimer對象。

1

這是我想出的解決方案。現在,計時器結束時的提醒僅通過「完成」打印到控制檯。非常感謝用戶Prawn,因爲我在這個解決方案中使用了他的一些代碼。

import WatchKit 
import Foundation 

var myTimer : NSTimer? 
var elapsedTime : NSTimeInterval = 0.0 
var startTime = NSDate() 
var duration : NSTimeInterval = 4.0 //Arbitrary 4 seconds to test timer. 


class InterfaceController: WKInterfaceController { 

override func awakeWithContext(context: AnyObject?) { 
    super.awakeWithContext(context) 
    WKTimer.setDate(NSDate(timeIntervalSinceNow: duration)) 

} 


override func willActivate() { 
    super.willActivate() 

} 

@IBOutlet var WKTimer: WKInterfaceTimer! //The WatchKit timer the user sees 

@IBAction func startButton() { //Start button 

    NSTimer.scheduledTimerWithTimeInterval(duration, target: self, selector: ("timerDone"), userInfo: nil, repeats: false) 
    WKTimer.setDate(NSDate(timeIntervalSinceNow: duration)) 
    WKTimer.start() 

} 


//Reset button resets the timer back to the original time set. 
@IBAction func resetButton() { 
    WKTimer.stop() 
    WKTimer.setDate(NSDate(timeIntervalSinceNow: duration)) 

} 


func timerDone() { 
    print("Done") 

} 


override func didDeactivate() { 
    // This method is called when watch view controller is no longer visible 
    super.didDeactivate() 
} 

} 
+0

如果手錶在喚醒時不調用timerDone方法計時器結束?如果時間用完(可能是NSTImer的應用程序處於睡眠狀態時),如何確保調用該方法。 – Scott

+0

嘿斯科特 - 想知道如果你或丹曾經想出如何確保它在應用程序睡着時被調用。我目前正在嘗試尋找解決方法。具體來說,我希望創建一些計數器,從3到0遞減計數,並在每隔一個時間間隔提供觸覺反饋。不幸的是,這隻在應用程序喚醒時才起作用,因爲scheduleTimer()在手錶擴展插件睡着時不會觸發。 – user2623825