2012年3月2日金曜日

アプリ起動時にデバイスが横向きだったときのUIViewControllerメソッド呼び出し順

ローテーションに対応するアプリを作る場合、ユーザーが横持ちでアプリを起動することも考えないといけません。
デバイスが横向き(Landscape)でアプリが起動した場合、最初の画面を管理するUIViewController派生クラスのメソッドがどういう順番で呼ばれているか調べました。

メソッド呼び出し順

メソッドが呼ばれた時点でのself.interfaceOrientationの状態も()内に示します。
  1. ※1 shouldAutorotateToInterfaceOrientation
  2. viewDidLoad (Portrait)
  3. ※1
  4. viewWillAppear (Portrait)
  5. ※1
  6. willRotateToInterfaceOrientation (Portrait)
  7. ※1
  8. viewDidApear (Landscape)
  9. didRotateFromInterfaceOrientation (Landscape)
※1はshouldAutorotateToInterfaceOrientationが呼ばれるタイミング。

ポイント

  • 横向きで起動してもPortraitの状態から始まる
  • viewDidAppearではすでにinterfaceOrientationに回転後の向きがセットされている
  • shouldAutorotateToInterfaceOrientationが随所で呼ばれる

UIScrollViewを使い起動時にoffsetを設定する場合など、縦と横では画面の長さが変わるので、どのタイミングで設定するかは注意が必要です。

1 件のコメント:

tokentoken さんのコメント...

どうやらiOS6 だと
didRotateFromInterfaceOrientation (Landscape)
が呼ばれないようになってしまったようです。