我有一个具有暂停方法的SKScene。我希望能够做到这样的事情:
func applicationWillTerminate(_ application: UIApplication) {
pauseLevel()
}
但是,我不知道如何从AppDelegate获取对SKScene的引用。
我尝试使用
application.inputView
但是,这是一个UIView。我怎样才能获得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)
}
每次移除观察者是否足够有效?
答案 0 :(得分:2)
我会废弃你的思维方式。在iOS中,会在应用程序事件发生时发送通知。在您的情况下,通知称为UIApplicationWillTerminate
您想要做的是在Scene类中挂钩此通知,我建议使用didMove(to:)
方法。
NotificationCenter.default.addObserver(self, selector: #selector(pauseLevel), name: .UIApplicationWillTerminate, object: nil)
现在,当你这样做时,你需要记住删除观察者 当你删除场景时,所以你想使用代码:
NotificationCenter.default.removeObserver(self)
在场景被移除的瞬间。我建议至少把它放在deinit
现在在Swift 4中,事情发生了一些变化。您需要将@objc
添加到pauseLevel函数,以便可以将其暴露给目标c库。