遊戲中的多個 UIViewController 如何從場景跳轉到 viewController
故事板 :
初始 viewController :一個空的 viewController,帶有一個顯示 GameViewController 的按鈕
GameViewController : Hello World
Sprite-kit 模板的典型 GameViewController。
目標 :我想從我的 SKScene
遊戲中展示第一個 viewController 並正確釋放我的場景。
描述 :為了獲得結果,我擴充套件了 SKSceneDelegate
類以構建一個自定義 protocol/delegate
,它從 GameViewController
轉換到第一個初始控制器(主選單)。此方法可以擴充套件到遊戲的其他 viewControllers。
GameViewController :
import UIKit
import SpriteKit
class GameViewController: UIViewController,TransitionDelegate {
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
if let scene = SKScene(fileNamed: "GameScene") {
scene.scaleMode = .aspectFill
scene.delegate = self as TransitionDelegate
view.presentScene(scene)
}
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
}
func returnToMainMenu(){
let appDelegate = UIApplication.shared.delegate as! AppDelegate
guard let storyboard = appDelegate.window?.rootViewController?.storyboard else { return }
if let vc = storyboard.instantiateInitialViewController() {
print("go to main menu")
self.present(vc, animated: true, completion: nil)
}
}
}
GameScene :
import SpriteKit
protocol TransitionDelegate: SKSceneDelegate {
func returnToMainMenu()
}
class GameScene: SKScene {
override func didMove(to view: SKView) {
self.run(SKAction.wait(forDuration: 2),completion:{[unowned self] in
guard let delegate = self.delegate else { return }
self.view?.presentScene(nil)
(delegate as! TransitionDelegate).returnToMainMenu()
})
}
deinit {
print("\n THE SCENE \((type(of: self))) WAS REMOVED FROM MEMORY (DEINIT) \n")
}
}