我正在使用 Xcode 和 swift 3 来制作一个基本的计时器。我有一个连接到我的 View Controller 的计时器标签,它每秒更新一次标签。当计时更长的时间时,秒会跑得更快(参见 GIF)。

谁能解释我做错了什么,或者我不应该做什么(错误的方法,更好的功能)?

这是相关代码:

@IBAction func startButtonTabbed(_ sender: UIButton) {

    if (sender == startButton) {

        let now              = Date()
        let formatter        = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        start_time           = formatter.string(from:now)

        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.timerAction), userInfo: nil, repeats: true)

    } else {

            timer.invalidate()
    }

}
func timerAction() {

    time += 1;
    updateTimingLabel(seconds: time)

}

func updateTimingLabel(seconds: Int) {

    self.timerLabel.text = stringFromTimeInterval(interval: TimeInterval(time)) as String

}

func stringFromTimeInterval(interval: TimeInterval) -> NSString {

    let ti = NSInteger(interval)
    let seconds = ti % 60
    let minutes = (ti / 60) % 60
    let hours = (ti / 3600)

    return NSString(format: "%0.2d:%0.2d:%0.2d",hours,minutes,seconds)

}

这是发生的事情:

ios - Swift3 scheduleTime 秒数在计时时间过长时运行过快-LMLPHP

最佳答案

可能您按了 2 次开始按钮并安排了两个计时器。
试试这个

@IBAction func startButtonTabbed(_ sender: UIButton) {

    if (sender == startButton) {


        if  !timer.isValid{

            let now              = Date()
            let formatter        = DateFormatter()
            formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
            start_time           = formatter.string(from:now)



        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.timerAction), userInfo: nil, repeats: true)
        }
    } else {

        timer.invalidate()
    }

}

关于ios - Swift3 scheduleTime 秒数在计时时间过长时运行过快,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45358794/

10-13 09:37