SKView&SKSceneを画面の回転に対応させる
iOSデバイスを回転させたときに、SpriteKitで使うSKView
やSKScene
をどうやって・どのタイミングで追従させるかについてです。
SpriteKitの中で完結させようとなると、SKScene
が持つdidChangeSize(CGSize)
メソッドを使うべきなのでしょう。しかしこのメソッドはサブクラスでオーバーライドしてあげないと使えず、デリゲートで外から制御させることができません。回転のためだけにオレオレスーパーSKSceneを作るのもなんだかなあと調べていたら、UIViewController
のviewWillTransition(to:with:)
を使う方法がStackOverflowで紹介されていて便利だったのでこちらでも紹介します。
Swiftで書くとしたら次のようになります。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { // SKViewの調整 (※AutoLayout設定済みなら不要) skView.frame = CGRect(x: 0, y: 0, width: size.width, height: size.height) // SKSceneのサイズをSKViewに合わせる currentScene.size = size // 新しい画面サイズで修正が必要な処理の実行 }
viewWillTransition(to:with:)
もサブクラスでオーバーライドして使うものとはいえ、ビューコントローラはたいていサブクラスで運用しているので、ずっと気軽に使えます。