このトピックについては、多くの矛盾した考えがあるようです。 私は単に私が使用した私のSKSceneでSKScene(Swift2 SpriteKit)SKSceneとUIViewControllerを効率的に切り替えるにはどうすればいいですか?
でのUIViewController、私のゲームで自分のメニューを持つことを望む:ノードが削除され
self.removeFromParent()
self.view?.presentScene(nil)
が、私はまだ持っているようにシーンが所定の位置にまだあります灰色の背景とfpsカウンタ。 UIViewControllerのViewアスペクトに戻り、シーンを非表示にすることはできますか?
私の方法一つの実施:
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にも関数を終了する必要がありますか? – james
@jamesもちろんGameViewControllerも却下することができますが、私のゲームではほとんどの場合、メニューがゲームのプレイを妨げないようにします。したがって、ユーザーがメニューを閉じるときに毎回、メニュービューを開いたときとまったく同じ状態にすることができます。 'GameViewController'を終了すると、新しい初期化されたゲームが戻ってきます。これに応じてこの動作を変更することができます。 –
うまくいけば、これは私のビューの問題の最終面であるはずです。私の編集した質問では、私は方法1の実装を示します。ただし、viewDidLoad()のprintステートメントは機能しますが、ビューとその要素は機能しません。私が逃したものは分かりません。ありがとう。 – james