Timer 计时器不会失效
我不能使快速计时器失效 定义对象和变量时,我使用Timer 计时器不会失效,timer,swift3,Timer,Swift3,我不能使快速计时器失效 定义对象和变量时,我使用 var scoreTimer = Timer() scoreTimer.invalidate() 当两个对象与此行碰撞时,我启动计时器: scoreTimer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(updatePassengerScore), userInfo: nil, repeats: true) 我的updatePass
var scoreTimer = Timer()
scoreTimer.invalidate()
当两个对象与此行碰撞时,我启动计时器:
scoreTimer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(updatePassengerScore), userInfo: nil, repeats: true)
我的updatePassengerScore方法如下所示
passengerScore -= 1
scoreLabel.text = String(passengerScore)
当检测到另一个碰撞时,我尝试用
var scoreTimer = Timer()
scoreTimer.invalidate()
但是变量passengerScore仍然在减少,我不知道为什么会出现这种情况。
有人有办法解决这个问题并让计时器停止吗?我读到的每个线程都说scoreTimer.invalidate()实际上应该停止计时器。我真的很困惑:-/您可能启动了多个计时器。如果在当前计时器失效之前点击创建计时器的代码行,那么将有两个活动计时器,其中只有一个可以失效 要防止这种可能性,请在创建新计时器之前,在
scoreTimer
上调用invalidate
:
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