【问题标题】:How Do I create a countdown timer with minutes and seconds in swift?如何快速创建带有分钟和秒的倒数计时器?
【发布时间】:2018-12-13 05:48:07
【问题描述】:

我找不到一个使用分钟和秒进行倒计时的教程。有一两个,但它们有点糟糕。

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 变量中,然后使用lazy 变量将其转换为下面的Int

但是,当我运行应用程序时,计时器仍然不倒计时。 据说这只是我从另一个教程中遵循的秒计时器。但发生的只是显示计时器的标签只是以00:prodSeconds的格式显示用户输入的数字,实际上并没有倒计时。

附:现在不要担心实现开始/停止按钮。在我的例子中,计时器应该在视图加载时启动。

【问题讨论】:

  • 您的问题不清楚。你的 prodTimeString 函数工作得很好。传入90,你会得到01:30
  • 您可能希望避免简单地每秒减去 1; Timer 不是很准确。我建议您计算与您的结束时间相对应的Date,然后使用timeIntervalSinceNow 计算剩余时间。此外,请在不到一秒(例如 0.5 秒)内运行计时器,以避免倒计时时出现抖动
  • @rmaddy 好的,我现在明白了......但问题是,用户将输入分钟而不是秒......现在,输入的任何输入都被读取为秒而不是分钟。 ..我将如何让用户输入的分钟以分钟为单位,然后转换为秒?
  • 乘以 60。
  • @rmaddy 没关系,我明白了,哈哈……非常感谢!

标签: ios swift countdowntimer seconds minute


【解决方案1】:

问题是你倒计时

intProdSeconds! -= 1

并将prodSeconds 传递给此

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

所以请确保只处理intProdSeconds

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多