我无法使Swift Timer失效。
在定义我的对象和变量时,我用
声明了计时器var scoreTimer = Timer()
当两个物体与此线发生碰撞时,我启动计时器:
scoreTimer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(updatePassengerScore), userInfo: nil, repeats: true)
我的updatePassengerScore方法如下所示
passengerScore -= 1
scoreLabel.text = String(passengerScore)
当检测到另一次碰撞时,我尝试用
停止计时器scoreTimer.invalidate()
但变量passengerScore仍然在下降,我不知道为什么会这样。 有没有人有线索锄头来解决这个问题并使定时器停止?我读过的每个线程都说scoreTimer.invalidate()实际上应该停止计时器。我真的很困惑: - /
答案 0 :(得分:2)
您可能正在启动多个计时器。如果您在当前的计时器失效之前点击了创建计时器的代码行,那么您将有两个活动计时器,其中只有一个可以使其无效。
为防止出现这种情况,请在创建新计时器之前在invalidate
上致电scoreTimer
:
scoreTimer.invalidate()
scoreTimer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(updatePassengerScore), userInfo: nil, repeats: true)
处理它的另一种方法是将scoreTimer
更改为可选项,然后仅在scoreTimer
为nil
时创建计时器。
var scoreTimer: Timer?
...
if scoreTimer == nil {
scoreTimer = Timer.scheduledTimer(...
}
...
scoreTimer?.invalidate()
scoreTimer = nil