2016-08-31 14 views
0

私はカウントダウンタイマー機能を作成したいのですが、ユーザーは同じボタンを押して一時停止して再開できます。私は、これにはoneが回答していることを含めて、いくつかの同様の質問があることを知っています。しかし、私はまだ立ち往生しています(2日目)。無効になっているにもかかわらず、私のタイマーはまだ刻々と変化しているようです。ここで開始、一時停止、再開NSTimer Swift

は私のコードです:

@IBOutlet weak var timerLabel: UILabel! 
var duration: NSTimeInterval { return Double((exercise!.duration))! * 60 } 
var interval: Double? 
var timer = NSTimer() 
var startTime = NSDate.timeIntervalSinceReferenceDate() 
var elapsedTime: Double? 
var timeLeft: Double? 
var inProgress = false 
var isPaused = false 
var completionStatus = false 


@IBAction func pressStart(sender: UIButton) { 
    if inProgress{ 
     if isPaused { 
      resumeAnimation(timeLeftShapeLayer) 
      sender.setTitle("Pause", forState: UIControlState.Normal) 
      print("pressed resume, with \(timeLeft!) time left") 
      startTime = NSDate.timeIntervalSinceReferenceDate() 
      timer = NSTimer.scheduledTimerWithTimeInterval(timeLeft!, target: self, selector: #selector(PerformExerciseViewController.updateTime), userInfo: nil, repeats: false) 
      isPaused = false 

     } else { 
      pauseAnimation(timeLeftShapeLayer) 
      isPaused = true 
      sender.setTitle("Resume", forState: UIControlState.Normal) 

      elapsedTime = NSDate.timeIntervalSinceReferenceDate() - startTime 
      timeLeft = duration - elapsedTime! 
      timer.invalidate() 

      print("pressed pause, with \(timeLeft!) time left") 
     } 
    } else { 
     drawTimeLeftShape() 
     timeLeftShapeLayer.addAnimation(strokeIt, forKey: nil) 
     sender.setTitle("Pause", forState: UIControlState.Normal) 

     startTime = NSDate.timeIntervalSinceReferenceDate() 
     timer = NSTimer.scheduledTimerWithTimeInterval(duration, target: self, selector: #selector(PerformExerciseViewController.updateTime), userInfo: nil, repeats: false) 
     inProgress = true 
     isPaused = false 
    } 

時間を印刷する場合:(。長いここで一時停止し、多分10秒)

押す一時停止、左56.3997309803963時間で

押された履歴書は、と56.3997309803963時間が残っています(超短再生時間0.1秒)

押された一時停止、47.3651859760284時間が残っています(一時停止中にカウントされた時間のようです

ありがとうございました!

答えて

0

私は残りの時間を間違って計算しました。 の代わりに:

timeLeft = duration! - elapsedTime! 

用途:

timeLeft = timeLeft! - elapsedTime! 
関連する問題