這個話題似乎有這麼多矛盾的想法。 我只是想有我在一個UIViewController菜單和我的比賽中SKScene(Swift2 SpriteKit)如何有效地切換SKScene和UIViewController?
在我SKScene我用:
self.removeFromParent()
self.view?.presentScene(nil)
節點被移除,但場面還是很到位的,因爲我仍然有灰色背景和fps計數器。我可以返回到UIViewController的視圖方面並隱藏場景嗎?
我的方法一種實現方式:
RootViewController的:
class RootViewController: UIViewController {
var menu = MenuViewController()
var game = GameViewController()
override func viewDidLoad() {
super.viewDidLoad()
print("root")
MenuPresent()
}
func GamePresent() {
self.addChildViewController(game)
self.view.addSubview((game.view)!)
game.didMoveToParentViewController(self)
}
func MenuPresent() {
self.addChildViewController(menu)
self.view.addSubview((menu.view)!)
menu.didMoveToParentViewController(self)
}
func menuDismiss() {
menu.willMoveToParentViewController(nil)
menu.removeFromParentViewController()
menu.view.removeFromSuperview()
}
}
MenuViewController:
class MenuViewController: UIViewController {
//var root = RootViewController()
override func viewDidLoad() {
super.viewDidLoad()
print("menu")
}
}
打印( 「菜單」)出現在我的控制檯,但是沒有出現實際視圖和MenuViewController的所有資產。
另一方面,我的GameViewController和它的SKScene工作正常。
嗨,感謝這個答案,我剛剛實現它。然而,只是想知道爲什麼你只在離開它時忽略MenuViewController而不是GameViewController?另外,爲了清楚你寫的所有方法應該在RootViewController中,甚至是dismiss函數? – james
@james當然,你也可以關閉'GameViewController',但在大多數情況下,在我的遊戲中,我不希望菜單中斷我的遊戲。所以每當用戶點擊關閉菜單時,他們可以在打開菜單視圖時使遊戲處於完全相同的狀態。如果你關閉了'GameViewController',那麼他們會回來一個新的初始化遊戲。您可以相應地更改此行爲。 –
希望這應該是我觀點問題的最後一個方面。在我編輯的問題中,我展示了我的方法一個實現。但是,viewDidLoad()中的print語句有效,但視圖及其元素不起作用。不知道我錯過了什麼。謝謝。 – james