定时器每次减一

Timer Subtracting One More Every Time

我有一个游戏计时器,可以为整个游戏计时。它第一次工作,但当我回到那个视图再次播放时,它每秒减去 2。下一次3等等。

var masterTimer: NSTimer? = nil

然后在 viewDidLoad 中我有:

self.masterTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "fulltime", userInfo: nil, repeats: true)

这是全职工作:

func fulltime() {


    var FullTime = defaults.integerForKey("FullTime")
    var ScoreType = defaults.integerForKey("ScoreType")

    FullTime -= 1 //take a second away
    if (FullTime > 0)
    {
        TimerLabel.text = String(FullTime)
        defaults.setInteger(FullTime, forKey: "FullTime")
    }
    else
    {

        if ScoreType == 1 {
            defaults.setInteger(Score, forKey: "Score1")
            defaults.synchronize()
        }
        else if ScoreType == 2 {
            defaults.setInteger(Score, forKey: "Score2")
            defaults.synchronize()
        }
        else if ScoreType == 3 {
            defaults.setInteger(Score, forKey: "Score3")
            defaults.synchronize()
        }
        else if ScoreType == 4 {
            defaults.setInteger(Score, forKey: "Score4")
            defaults.synchronize()
        }
        else if ScoreType == 5 {
            defaults.setInteger(Score, forKey: "Score5")
            defaults.synchronize()
        }
        else if ScoreType == 6 {
            defaults.setInteger(Score, forKey: "Score6")
            defaults.synchronize()
        }
        else if ScoreType == 7 {
            defaults.setInteger(Score, forKey: "Score7")
            defaults.synchronize()
        }
        else if ScoreType == 8 {
            defaults.setInteger(Score, forKey: "Score8")
            defaults.synchronize()
        }
        else if ScoreType == 9 {
            defaults.setInteger(Score, forKey: "Score9")
            defaults.synchronize()
        }

        ScoreString = String(Score)
        ScoreLabel.text = ScoreString


        let controller = storyboard?.instantiateViewControllerWithIdentifier("HighScore") as HighScore
        presentViewController(controller, animated: true, completion: nil)


    }
}

您之前拥有的计时器不会仅仅因为您将新计时器重新分配给 masterTimer 变量而停止触发,或者因为 masterTimer 变量不再存在,因为它所属的对象已被释放,您实际上需要先取消再开始新的

使用 scheduledTimerWith... 方法创建的计时器将自动添加到当前 运行 循环中,并保持 运行ning 独立于您是否为它们保留引用这一事实。所以基本上当你离开屏幕时它会继续运行,除非你使它无效。

您可以通过调用计时器的无效方法来实现。

if(self.masterTimer != nil){
    self.masterTimer!.invalidate()
}

您应该确保在计时器不再有用时调用计时器的 invalidate 方法。 在你的情况下,可能在你的 viewController 的 viewWillDisappear、viewDidDisappear 方法中,在你的游戏逻辑的某些方法中,比如当前游戏结束或者可能在 dealloc 方法中。