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
,然后在恢复时将其设置为近期的某个时间。
- 使用布尔变量指示暂停状态,并让您的计时器回调在计时器触发时检查该变量。如果暂停 == 真,什么也不做。
我正在使用 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
,然后在恢复时将其设置为近期的某个时间。 - 使用布尔变量指示暂停状态,并让您的计时器回调在计时器触发时检查该变量。如果暂停 == 真,什么也不做。