定时器每次减去一次

时间:2015-01-11 18:01:14

标签: ios swift timer

我有一个游戏计时器,可以运行整个游戏的时间。它第一次工作,但当我回到那个视图再次播放时,它每秒减去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)


    }
}

1 个答案:

答案 0 :(得分:0)

之前的计时器并没有因为你将新计时器重新分配给masterTimer变量而停止触发,或者因为masterTimer变量不再存在,因为它所属的对象被解除了,你需要实际取消它首先,然后开始新的。

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

您可以通过调用计时器上的invalidate方法来执行此操作。

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

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