前提・実現したいこと
アップル純正のストップウォッチアプリを作りたいのです。
発生している問題・エラーメッセージ
開始ボタンを押した後に停止ボタンを押し、その後、開始ボタンを押すと停止させた時間分進んで表示されてしまいます。
該当のソースコード
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var minuteLabel: UILabel! @IBOutlet weak var secondLabel: UILabel! @IBOutlet weak var subsecondLabel: UILabel! @IBOutlet weak var lapButton: UIButton! @IBOutlet weak var startAndStopButton: UIButton! @IBOutlet weak var tableView: UITableView! fileprivate var timer: Timer? fileprivate var startTime = Date() private var isWorkingTimer = false private var isPaused = false override func viewDidLoad() { super.viewDidLoad() subsecondLabel.text = "00" secondLabel.text = "00" minuteLabel.text = "00" startAndStopButton.backgroundColor = .green } @IBAction func startAndStopButton(_ sender: Any) { if !isWorkingTimer && !isPaused { timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(startButtonAction), userInfo: nil, repeats: true) startTime = Date() startAndStopButton.backgroundColor = .red startAndStopButton.setTitle("停止", for: .normal) //ラップボタンを使えるようにする isWorkingTimer = true }else if isWorkingTimer && !isPaused { timer?.invalidate() startAndStopButton.backgroundColor = .green startAndStopButton.setTitle("開始", for: .normal) //ラップボタンをリセット表示にする isPaused = true }else if isWorkingTimer && isPaused { timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(startButtonAction), userInfo: nil, repeats: true) startAndStopButton.backgroundColor = .red startAndStopButton.setTitle("停止", for: .normal) //リセットボタンをラップ表示にする isPaused = false } } @objc func startButtonAction(_ sender: Any) { let currentTime = Date().timeIntervalSince(startTime) let subsecond = Int((currentTime - floor(currentTime))*100) let second = Int(fmod(currentTime, 60)) let minute = Int(fmod((currentTime/60), 60)) subsecondLabel.text = String(format:"%02d", subsecond) secondLabel.text = String(format:"%02d", second) minuteLabel.text = String(format:"%02d", minute) }
}
試したこと
どうすればいいのか見当がつきませんでした。
補足情報(FW/ツールのバージョンなど)
swift,xcode共に最新です。
次回ご質問される時には、コード部分を ``` で囲むか、あるいは <code> 機能を使ってコードを掲載していただけますでしょうか。
回答のように、整形された読みやすい表示になりますので、ぜひご協力お願いします。