Swift NSTimer 暂停恢复

Swift NSTimer Pause Resume

我正在使用 Swift 编程,但遇到了问题。 我正在使用 NSTimer 使用计时器编写代码,并且我已成功停止计时器。我创建了一个按钮来重新启动计时器,但我不知道如何输入代码。

import UIKit

class ViewController: UIViewController {
    /*Timer1*/
    var landmarkTime = 0
    var landmarkNSTimer = Timer()

    /*Timer3*/
    func landmarkTimer() {
        landmarkTime += 1
    }

    /*PauseButton*/
    @IBAction func PauseButton(_ sender: Any) {
        landmarkNSTimer.invalidate()
    }

    /*ResumeButton*/
    @IBAction func ResumeButton(_ sender: Any) {
        /*I want to restart the timer in this part, but I do not know what code to put in.*/
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        /*Timer2*/
        landmarkNSTimer = Timer(timeInterval: 1, target: self, selector: #selector(ViewController.landmarkTimer), userInfo: nil, repeats: true)
        RunLoop.main.add(landmarkNSTimer, forMode: RunLoopMode.commonModes)
    }
}

/* ResumeButton */这是个问题。我在这部分输入了 /* Timer2 */,但我有一个未知问题,正在寻找另一个代码。告诉在 /* ResumeButton */ 中输入新代码,以便重新启动计时器。

您没有暂停计时器,而是停止了它。如果您阅读 invalidate 的文档,它会显示 [已添加强调]:

Stops the receiver from ever firing again and requests its removal from its run loop.

计时器不会暂停;它根本不是他们 API 的一部分。如果您想要 pause/resume 行为,可以通过多种方式获得,包括:

  • 恢复时创建一个新计时器。
  • 暂停时将fireDate设置为Date.distantFuture,然后在恢复时将其设置为近期的某个时间。
  • 使用布尔变量指示暂停状态,并让您的计时器回调在计时器触发时检查该变量。如果暂停 == 真,什么也不做。