如何以分钟和秒为单位创建倒数计时器?

时间:2018-07-04 18:52:37

标签: ios swift countdowntimer seconds minute

我找不到一个能以分钟和秒为单位进行倒数计时器的教程。一两个,但它们有点不好。

import UIKit

class HomeViewController: UIViewController {
    @IBOutlet weak var focusSession: UILabel!
    @IBOutlet weak var breakSession: UILabel!

    var prodSeconds = String() // This value is set in a different view controller
    lazy var intProdSeconds = Int(prodSeconds)
    var timer = Timer()
    var isTimerRunning = false  // Make sure only one timer is running at a time

    override func viewDidLoad() {
        super.viewDidLoad()

        if isTimerRunning == false {
            runProdTimer()
        }

        //focusSession.text = String(prodMinutes) + ":" + String(prodSeconds) // Ignore this for now stack overflow ppl
    }

    func runProdTimer() {
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(HomeViewController.updateProdTimer)), userInfo: nil, repeats: true)
        isTimerRunning = true
    }

    @objc func updateProdTimer() {
        if intProdSeconds! < 1 {
            timer.invalidate()
            focusSession.text = "00:00"
        }
        else {
            intProdSeconds! -= 1
            focusSession.text = prodTimeString(time: TimeInterval(prodSeconds)!)
        }
    }

    func prodTimeString(time: TimeInterval) -> String {
        let prodMinutes = Int(time) / 60 % 60
        let prodSeconds = Int(time) % 60

        return String(format: "%02d:%02d", prodMinutes, prodSeconds)
    }
}

用户输入他们的时间量,并将其存储在prodSeconds变量中,然后使用Int变量将其转换为它下面的lazy

但是,当我运行应用程序时,计时器仍然不倒计时。 据推测,这只是我从另一本教程中学到的秒数计时器。但是,所有发生的事情是,显示计时器的标签仅显示了用户以00:prodSeconds格式输入的数字,而实际上并未倒数。

P.S。不必担心现在实现启动/停止按钮。就我而言,应该在加载视图时启动计时器。

1 个答案:

答案 0 :(得分:1)

问题是您倒计时了

intProdSeconds! -= 1

并将prodSeconds传递给此

focusSession.text = prodTimeString(time: TimeInterval(prodSeconds)!)

因此请确保仅处理intProdSeconds