2015-04-20 13 views
6

Sto provando a creare un timer per il conto alla rovescia x minuti e y secondi. Sto calcolando il numero di secondi e la creazione del InterfaceTimer in questo modo: timer.setDate (NSDate (timeIntervalSinceNow: doppia (secondsValue + 1))) timer.stop()WKInterfaceTimer utilizzato come timer per avviare e arrestare il conto alla rovescia

dopo che continuo stoping e di partenza ancora e ancora, ma i valori stanno improvvisamente diminuendo quando "il tempo (ora) non si ferma". Ad esempio: se il timer mostra: 55, lo avvio per 3 secondi e lo interrompo, mostra: 52, aspetto 10 secondi e poi lo riavvio, parte da: 42.

Non riesco a salvare il valore attualmente in WKInterfaceTimer, in modo che sia possibile ricominciare dallo stesso punto. Tutto ciò che ho provato non funziona. Qualcuno ha lavorato con il timer e ha mantenuto lo stesso valore dopo averlo fermato?

risposta

8

Sì, il timer del watchkit è un po '... goffo ... e sicuramente non molto intuitivo. Ma questa è solo la mia opinione

Dovrai mantenere l'impostazione di data/timer ogni volta che l'utente sceglie di riprendere il timer.

Ricorda, avrai anche bisogno di un NSTimer interno per tenere traccia delle cose poiché l'attuale timer di WatchKit è semplicemente per la visualizzazione senza avere una vera logica collegata ad esso.

Quindi forse qualcosa di simile ... Non è elegante. Ma funziona

 @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, target: self, selector: Selector("timerDone"), userInfo: nil, 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 
     }