将秒转换为分钟:秒在标签MacOS中

时间:2018-07-06 21:33:28

标签: swift xcode timer countdown seconds

我是一名学校老师,我们被“责成”为课程使用特定的计时器,该计时器过低并不能在我们的苹果iMac上使用。我正在尝试用xcode创建自己的代码,到目前为止,已经创建了一个基本窗口,该窗口将在几秒钟内倒数一个标签。目前,我已经分配了按钮,它们可以工作(以60秒为增量)。

enter image description here

这有效并且很好,但是理想情况下,我希望标签显示分钟和秒(对于孩子来说要容易得多)。编写此代码的最佳方法是什么?我上次使用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()
}

-

1 个答案:

答案 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() }
}