2017-08-19 11 views
1

私は一時停止メソッドを持つSKSceneを持っています。SwiftのAppDelegateから現在のSKSceneを参照する方法

func applicationWillTerminate(_ application: UIApplication) { 
    pauseLevel() 
} 

しかし、私はAppDelegateから私のSKSceneへの参照を取得する方法がわからない:私はこのような何かを行うことができるようにしたいです。

Iしかし、それはUIViewのある

application.inputView 

を使用してみました。 SKSceneはどのように入手できますか?

deinit { 
    NotificationCenter.default.removeObserver(self) 
} 

override func didMove(to view: SKView) { 
    self.anchorPoint = CGPoint(x: 0.5, y: 0.5) 
    self.backgroundColor = UIColor(red:0.17, green:0.24, blue:0.31, alpha:1.0) 
    self.physicsWorld.gravity = CGVector(dx: 0, dy: 0) 
    NotificationCenter.default.addObserver(self, selector: #selector(runPause), name: .UIApplicationWillResignActive, object: nil) 
} 

EDITは、それが十分な観察者を毎回除去するのに効果的なのでしょうか?

+0

いいえ、シーンがメモリから削除された場合にのみ削除されます。シーンがメモリに残っていても現在のビューから離れている場合、オブザーバはまだ存在します。私はあなたのゲームがどのように設計されているのか分からず、シーンがメモリから削除されたときに少なくともあなた自身を守っているので、あなたのアプリは終了時にクラッシュしません。 – Knight0fDragon

答えて

2

あなたの考え方を消してしまいます。 iOSでは、アプリケーションイベントが発生したときに通知が送信されます。あなたの場合、通知はUIApplicationWillTerminate

と呼ばれています。あなたがしたいことは、Sceneクラスのこの通知にフックすることです。didMove(to:)メソッドでお勧めします。

NotificationCenter.default.addObserver(self, selector: #selector(pauseLevel), name: .UIApplicationWillTerminate, object: nil) 

今、あなたがこれを行うとき、あなたはあなたがシーンを削除しているので、あなたのコードを使用したいときオブザーバー を削除することを忘れないでくださいする必要があります。シーンが削除された瞬間に

NotificationCenter.default.removeObserver(self) 

。私は少なくともそれを入れてお勧めしますdeinit

今すぐスウィフト4では、物事は少し変わります。目的のCライブラリに公開できるように、@objcをpauseLevel関数に追加する必要があります。

+0

最後の編集を確認できますか? – Pablo

関連する問題