我找不到一个可以实现分钟和秒的倒计时器的教程。虽然有一两个,但它们并不是很好。
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
的格式显示用户输入的数字,并且实际上不会倒计时。P.S.暂时不要担心实现启动/停止按钮。在我的情况下,计时器应该在视图加载时启动。
prodTimeString
函数运行良好。传入90
,你会得到01:30
。 - rmaddyTimer
不是非常准确的。我建议你计算对应于你的结束时间的Date
,然后使用timeIntervalSinceNow
来计算剩余时间。此外,以小于一秒的速度运行你的计时器,比如0.5秒,以避免倒计时中的抖动。 - Paulw11