计时器不会失效

时间:2017-04-03 18:49:50

标签: timer swift3

我无法使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()实际上应该停止计时器。我真的很困惑: - /

1 个答案:

答案 0 :(得分:2)

您可能正在启动多个计时器。如果您在当前的计时器失效之前点击了创建计时器的代码行,那么您将有两个活动计时器,其中只有一个可以使其无效。

为防止出现这种情况,请在创建新计时器之前在invalidate上致电scoreTimer

scoreTimer.invalidate()
scoreTimer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(updatePassengerScore), userInfo: nil, repeats: true)

处理它的另一种方法是将scoreTimer更改为可选项,然后仅在scoreTimernil时创建计时器。

var scoreTimer: Timer?

...

if scoreTimer == nil {
    scoreTimer = Timer.scheduledTimer(...
}

...

scoreTimer?.invalidate()
scoreTimer = nil