【iPhoneアプリ】iOS6では画面の向きが変わった時に呼ばれる関数が違う


タイトル通りです。違うんです。
iPhone5で試してびっくりしました(;´Д`)
対応方法など調べたりしたのでメモ的なものを…



shouldAutorotateを使う


今まで画面の向きが切り替わる時に使われていた
shouldAutorotateToInterfaceOrientation
という関数は全く呼ばれなくなってしまったようです。

対応していないと縦専用に作った画面が無残なことに…(実際なりました)
あまりにもひどい、りんごの罠です。

代わりに使われるのが
- (BOOL)shouldAutorotate;

- (NSUInteger)supportedInterfaceOrientations;
のようです。


ただ画面を固定したい!という時はNOを返せばOKです。

向きが変わる方向によって何か特別な処理を入れたい、という場合は
shouldAutorotate関数の中でどの向きに変わったか調べられます。

・例
-(BOOL)shouldAutorotate{
    //向きを調べる
    int orientation = [[UIDevicecurrentDevice] orientation];
    switch ( orientation ) {
        caseUIDeviceOrientationPortrait:
            // 普通の向き
            break;
        caseUIDeviceOrientationLandscapeLeft:
            // 左向き
            break;
        caseUIDeviceOrientationLandscapeRight:
            // 右向き
            break;
        caseUIDeviceOrientationPortraitUpsideDown:
            // 逆さ向き
            break;
    }
    
    return YES; // 向きを変える
}



もう一つのsupportedInterfaceOrientations関数ですが、
こちらはshouldAutorotateでYESと返された時だけ呼ばれて、
返り値に定数を指定することでどの向きをサポートするか選べるようです。

UIInterfaceOrientationMaskPortrait -> 縦画面のみ
UIInterfaceOrientationMaskLandscape -> 左右横画面対応
UIInterfaceOrientationMaskAll -> 全ての向き対応

といった感じです。

・例
- (NSUInteger)supportedInterfaceOrientations {

    // 左右横向きで回転する
    return UIInterfaceOrientationMaskLandscape;
}




       |
       |
 : : :::::::,. -─´、て
::: :: :::Σco===、!,_
: : :: :::::l´i(ノリハノリ)  iPhoneでもこういう対応って必要なんですね…
 : : :::::ルlリ⊃⊂ヽ
 : : ::::(( //xxxxヽ、─────────────────
    /~~~
  ./





関連記事

【iPhoneアプリ】iOS6では画面の向きが変わった時に呼ばれる関数が違う” への1件のコメント

  1. ピンバック: 【iPhoneアプリ】UIDeviceクラスを利用した端末情報、バッテリ情報、画面の向きを取得する方法 | 桜花満開/テンシホタル