- Launch in your supported orientation, regardless of the current device orientation.
- Avoid displaying a UI element that tells people to rotate the device.
- Support both variants of an orientation.
という三つの項目があり、これらを満たさないと審査を通らないようだ。要するに、UIを最低でも上向き/下向き、あるいは左向き/右向きにフレキシブルに対応させる必要がある。
通常デバイスの回転にあわせたUIの対応はViewControllerのshouldAutorotateToInterfaceOrientation:を使うのが簡単(回転のアニメーションや座標の変換を自動でやってくれるので)だ。しかし、OpenGL ESアプリケーションテンプレートを使って作ったプロジェクトにはViewControllerが存在しないため、回転対応させるのが意外と面倒臭い。
[[UIDevice currentDevice] orientation]で現在のデバイスの方向を取得することはできるので、それを元に描画時にマトリクス変換(glRotatef)を使って描画を180度回転させることもできるが、UIへのタッチイベントの座標の変換も手動でやらなければいけなくなるので面倒くさい。方向回転時のアニメーションも行われないので、見た目的にもあまり美しくない。
UIViewController(のサブクラス)上にEAGLViewを載せて、回転部分の処理はUIViewController上で行うという方法に関しては、UIViewControllerを挟む以上パフォーマンス的に不利なのではないか、という感じがするがここの情報を読んでいるとその差は無視してよい程度らしい。
ということで、やはりOpenGLを使ってiPad用のゲームを作る場合はUIViewControllerを使って回転対応を行うのがよさそうだが、最初OpenGL ESアプリケーションのテンプレートで作成したプロジェクトに後からUIViewControllerを追加しようとしたら意外と面倒だった。View-basedのテンプレートを使って作ったプロジェクトにEAGLViewを追加するほうが簡単でおすすめ。
作業手順
- OpenGL ES Applicationのテンプレートを使ってEAGLView、ES1Renderer、ES2Renderer等OpenGLを使用するためのクラスのファイルを生成しておく。プロジェクト自体は今後使わないので削除してしまってOK。
- View-based Applicationのテンプレートを使って新しいプロジェクトを作成する。
- EAGLView、ES1Renderer、ES2Renderer、ESRenderer.h等をView-basedのプロジェクトに追加する。
- OpenGLESとQuartzCoreフレームワークをプロジェクトに追加する。
- ViewControllerのxibファイルを開き、EAGLViewクラスのビューを配置して大きさの調整等を行う。
- 必要に応じて、ビューのアウトレットを設定しViewControllerのviewDidLoad内などでstartAnimation等を呼び出すようにする。
「OpenGL ESベースのアプリケーションのiPad対応」への1件のフィードバック