我正在尝试计算车辆通过两个检查站所需的时间。我设置了以下计时器来实现这一点。
func startTimer() {
if hasStarted == true && timerStarted == false {
print("Timing started!")
gameTimer = Timer.scheduledTimer(timeInterval: 0.001, target: self, selector: (#selector(activeTiming)), userInfo: nil, repeats: true)
timerStarted = true
}
}
@objc func activeTiming() {
print("Active timing block")
if(hasFinished == false) {
gameTime = gameTime + 0.001
print("Add time succeeded")
} else {
gameTimer?.invalidate()
}
}
预期产出如下:
Timing started!
Active timing block
Add time succeeded
Add time succeeded ... etc
实际输出:
Timing started!
因此,似乎startTimer被正确调用,但计时器没有触发activeTiming代码块。任何建议都将非常有帮助。提前感谢您的帮助。
3条答案
按热度按时间u59ebvdq1#
发布这段代码,因为它是我正在使用的,但我不是Maven斯威夫特,所以你的里程可能会有所不同!
用法:
//重置性能DefenseLoop. reset()
ctzwtxfj2#
您的代码对我来说是有效的,但这并不是您希望对事件计时的方式,因为
Timer
不是那么精确,而且您浪费了大量的计算时间(读取电池)。相反,我建议采取以下做法:
事件开始时,记录开始时间:
事件结束时,计算经过的时间:
elapsedTime
将以秒为单位(包括小数秒)。u0sqgete3#
我也遇到过一个类似的问题,即定时器主体没有被调用。我发现定时器是从后台线程而不是主线程调度的。将它 Package 在
DispatchQueue.main.async
中可以解决这个问题。