暂停和重新创build计时器与通知问题Swift

所以我有两个计时器,一个提高分数,一个产生敌人。 我使用通知来使计时器无效,然后我使用另一个来重新创build计时器。 当我退出,然后打开应用程序,有两组敌人彼此顶部产卵。 我认为timerRecreate = true,GameScene中的常规定时器也被调用。

GameViewController.swift文件:

class GameViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("pauseTimers:"), name:UIApplicationWillResignActiveNotification, object: nil) NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("startTimers:"), name:UIApplicationDidBecomeActiveNotification, object: nil) } func pauseTimers(notification : NSNotification) { println("Observer method called") timer.invalidate() scoretimer.invalidate() } func startTimers(notification : NSNotification) { println("Observer method called") timerRecreate = true } 

GameScene.swift中的定时器代码

 override func didMoveToView(view: SKView) { //Spawn timer for enemy blocks timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: Selector("spawnEnemies"), userInfo: nil, repeats: true) //Timer for keeping score scoretimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("scoreCounter"), userInfo: nil, repeats: true) } override func update(currentTime: CFTimeInterval) { /* Called before each frame is rendered */ if timerRecreate == true { //Spawn timer for enemy blocks timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: Selector("spawnEnemies"), userInfo: nil, repeats: true) //Timer for keeping score scoretimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("scoreCounter"), userInfo: nil, repeats: true) timerRecreate = false } } 

我想问题是,当你最初打开应用程序,是退出它或第一次打开它时,timerRecreate设置为true,以及块的规则产卵,所以两组块产生在同一个时间。 我怎样才能解决这个问题?

修复! 我希望…

无论如何,inheritance人我做了什么。 我创build了另一个名为timerz的布尔值,并在做出DidBecomeActive通知时将其设置为false。 同时,timeRecreate被设置为true。 这保证了两个计时器设置不会同时运行。 在if语句中的timRecreate是否为true的更新函数中,我将timeRecreate设置为false,timerz设置为true。 所以定时器重新创build,然后切换回老式的产卵方式。 我也把这个旧的方法产生在一个if语句里面,看timerz是true还是false。