我是一名学校老师,我们被“责成”为课程使用特定的计时器,该计时器过低并不能在我们的苹果iMac上使用。我正在尝试用xcode创建自己的代码,到目前为止,已经创建了一个基本窗口,该窗口将在几秒钟内倒数一个标签。目前,我已经分配了按钮,它们可以工作(以60秒为增量)。
这有效并且很好,但是理想情况下,我希望标签显示分钟和秒(对于孩子来说要容易得多)。编写此代码的最佳方法是什么?我上次使用xcode是在2009年,现在我已经过时了!!预先感谢
-
@objc func updateTimer() {
seconds -= 1 //This will decrement(count down)the seconds.
countdownLabel.stringValue = "\(seconds)" //This will update the label.
}
-
@objc func runTimer() {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector:(#selector(ViewController.updateTimer)), userInfo: nil, repeats: true)
}
-
@IBAction func threeMin(_ sender: Any) {
seconds = 180
runTimer()
}
-
答案 0 :(得分:0)
有很多解决方案。方便的是DateComponentsFormatter
let formatter : DateComponentsFormatter = {
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.minute, .second]
return formatter
}()
@objc func updateTimer() {
seconds -= 1
countdownLabel.stringValue = formatter.string(from: TimeInterval(seconds))!
}
一些改进:
以秒为单位将标签分配给所有按钮,例如将threeMin
按钮的标签设置为180。然后仅使用一个 IBAction
并将所有按钮连接到该动作。
在操作中,首先检查计时器是否正在运行,并仅在计时器未运行时启动计时器
var timer : Timer?
@IBAction func startTimer(_ sender: NSButton) {
if timer == nil {
seconds = sender.tag
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.updateTimer), userInfo: nil, repeats: true)
}
}
创建一个可靠地停止计时器的功能
func stopTimer() {
if timer != nil {
timer?.invalidate()
timer = nil
}
}
如果updateTimer()
为0,则在seconds
函数中停止计时器
@objc func updateTimer() {
seconds -= 1
countdownLabel.stringValue = formatter.string(from: TimeInterval(seconds))!
if seconds == 0 { stopTimer() }
}