2017-07-27 8 views
1

私は基本的なタイマーを作るためにスイフト3でXcodeを使用しています。毎年ラベルを更新するビューコントローラにタイマーラベルが接続されています。より長い時間のタイミングをとると、秒はより早く実行されます(GIFを参照)。Swift3 scheduled時間が長すぎると時間がかかりすぎて

誰かが私が間違ってやっていることを説明することができますか、私は何をしてはいけません(間違ったアプローチ、より良い機能)?これは何が起こるかである

@IBAction func startButtonTabbed(_ sender: UIButton) { 

    if (sender == startButton) { 

     let now    = Date() 
     let formatter  = DateFormatter() 
     formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
     start_time   = formatter.string(from:now) 

     timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.timerAction), userInfo: nil, repeats: true) 

    } else { 

      timer.invalidate() 
    } 

} 
func timerAction() { 

    time += 1; 
    updateTimingLabel(seconds: time) 

} 

func updateTimingLabel(seconds: Int) { 

    self.timerLabel.text = stringFromTimeInterval(interval: TimeInterval(time)) as String 

} 

func stringFromTimeInterval(interval: TimeInterval) -> NSString { 

    let ti = NSInteger(interval) 
    let seconds = ti % 60 
    let minutes = (ti/60) % 60 
    let hours = (ti/3600) 

    return NSString(format: "%0.2d:%0.2d:%0.2d",hours,minutes,seconds) 

} 

enter image description here

+0

@Ivan Skrobotからの回答が正しいです。私はここであなたのコードをコピーしてテストプロジェクトに貼り付け、ボタンで2回タップする動作を再現することができました。一度タップすると正しくカウントされます。そして、あなたがボタンをタップするだけで、それはより速くて速くなります。 – GIJOW

答えて

0

おそらくあなたは、スタートボタンを2回押すと、次の2つのタイマーを予定し

これは、関連するコードです。 お試しください

@IBAction func startButtonTabbed(_ sender: UIButton) { 

    if (sender == startButton) { 


     if !timer.isValid{ 

      let now    = Date() 
      let formatter  = DateFormatter() 
      formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
      start_time   = formatter.string(from:now) 



     timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.timerAction), userInfo: nil, repeats: true) 
     } 
    } else { 

     timer.invalidate() 
    } 

} 
+0

それは妥当と思われます:)私はしばらくの間、シムを実行し、あなたが知って受け入れるようにします。 – Yolo

+0

これは問題と思われました。ありがとうございました! – Yolo

関連する問題