gpt4 book ai didi

swift - 如何从 Swift 中的 AppDelegate 引用当前的 SKScene

转载 作者:搜寻专家 更新时间:2023-11-01 07:09:33 26 4
gpt4 key购买 nike

我有一个具有暂停方法的 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)
}

每次移除观察者是否足够且有效?

最佳答案

我会废除你的思维方式。在 iOS 中,通知会在应用程序事件发生时发送。在您的情况下,通知称为 UIApplicationWillTerminate

你想要做的是在你的 Scene 类中 Hook 这个通知,我建议在 didMove(to:) 方法中。

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

现在当你这样做的时候,你需要记得移除观察者 当你正在移除场景时,所以你想使用代码:

   NotificationCenter.default.removeObserver(self)

场景有时会被移除。我建议至少将它放在 deinit

现在在 Swift 4 中,情况发生了一些变化。您需要将 @objc 添加到您的 pauseLevel 函数,以便它可以暴露给 objective-c 库。

关于swift - 如何从 Swift 中的 AppDelegate 引用当前的 SKScene,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45766527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com