Swift定时器停止一次后不重新启动

Swift timer does not restart after stopped once

我用这个计时器撞墙了。

我尝试创建这个计时器,当游戏开始时,它会开始计时。当角色死亡时,它会停止。我一切正常,但我的问题是我无法在下一轮重新启动它。

这是我的代码。

var startTime = NSTimeInterval()
var timer:NSTimer = NSTimer()

override func didMoveToView(view: SKView) {
    let aSelector : Selector = "updateTime"
    timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: aSelector, userInfo: nil, repeats: true)
    startTime = NSDate.timeIntervalSinceReferenceDate()

    scoreLabel.fontName = "Helvetica"
    scoreLabel.fontSize = 40
    scoreLabel.text = "0"
    scoreLabel.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMaxY(self.frame) - 90)
    scoreLabel.zPosition = 20

    self.addChild(scoreLabel)
}

func updateTime() {
    var currentTime = NSDate.timeIntervalSinceReferenceDate()
    var elapsedTime: NSTimeInterval = currentTime - startTime
    let minutes = UInt8(elapsedTime / 60.0)
    elapsedTime -= (NSTimeInterval(minutes) * 60)
    let seconds = UInt8(elapsedTime)
    elapsedTime -= NSTimeInterval(seconds)
    let fraction = UInt8(elapsedTime * 100)

    let strMinutes = minutes > 9 ? String(minutes): "0" + String(minutes)
    let strSeconds = seconds > 9 ? String(minutes): "0" + String(seconds)
    let strFraction = fraction > 9 ? String(fraction): "0" + String(fraction)

    scoreLabel.text = "\(strMinutes):\(strSeconds):\(strFraction)"
}

func didBeginContact(contact: SKPhysicsContact) {
    if (gameOver) == 0 {
        timer.invalidate()
        gameOver = 1
        movingObjects.speed = 0
        gameOverLabel.fontName = "Helvetica"
        gameOverLabel.fontSize = 40
        gameOverLabel.text = "Game over! press to restart."
        gameOverLabel.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame) )
        gameOverLabel.zPosition = 20
        labelHolder.addChild(gameOverLabel)
    }
}

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    if (gameOver == 0) {
          my methods......
    } else {
        scoreLabel.text = "00:00:00"
        gameOver = 0
    }
}

来自Apple Doc

invalidate() 停止接收器再次发射并请求将其从 运行 循环中移除。

如果你必须再次启动定时器,你需要初始化定时器again.You必须使新的one.Once失效,定时器对象不能被重用。