忍者ブログ

[PR]

2024年03月19日
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

iOS6における画面回転への対応方法

2013年04月07日
iOS5や6になって画面の表示前に出されるメッセージ(一般的な言い方をすると関数でしょうか)群にかなり変更があり、昔のプロジェクトのままだとなんだか画面のレイアウトがおかしいぞということになりやすいです。とりあえず自分の経験でこうすれば良いのではないかという対処法について書いてゆきます。

まず、画面を表示させたときにレイアウトに問題がある場合には、その問題のあるパーツを管理するViewControllerのメソッドファイル内で、viewWillAppear:の中で初期化するようにしておくと良いです。現在ない状態なら作っておきましょう。画面の回転状態でレイアウトを変更する必要がある場合には、現在の画面の回転状態を[[UIApplication sharedApplication]statusBarOrientation]で取得します。横向きのそれぞれで別のレイアウトにすることは稀ですから、画面が横向きかどうかをUIInterfaceOrientationIsLandscape()マクロをif文の中に放り込んで、カッコの中に先ほどの[[UIApplication sharedApplication]statusBarOrientation]を入れて画面が横向きかの判定をすれば良いでしょう。回転状態などの判定部分についてまとめると以下のような感じです。

    UIInterfaceOrientation interfaceOrientation=[[UIApplication sharedApplication]statusBarOrientation];
    if (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) {
        if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) {
            // iPadで画面が横向きのときの初期レイアウトを以下に追加
        } else {
            // iPadで画面が縦向きのときの初期レイアウトを以下に追加
        }
    } else if(UIInterfaceOrientationIsLandscape(interfaceOrientation)){
        // iPhone/iPod touchで画面が横向きのときの初期レイアウトを以下に追加
    } else {
        // iPhone/iPod touchで画面が横向きのときの初期レイアウトを以下に追加
    }

そしてshouldAutorotateToInterfaceOrientation:にはとりあえず向きに応じてYESで回転許可、NOで回転不可を返す部分だけは(iOS6以上では呼び出されることすら無いのですが)一応書いておいて、実際に回転でレイアウトをいじる部分に関してはwillAnimateRotationToInterfaceOrientation:duration:の中でtoInterfaceOrientationを使って仕分けを行って、実際のレイアウト変更を行うという形になります。

これだけやればiOS6以上でレイアウトが崩れる問題は解決出来るでしょう。当然ながらstoryboradやnibファイルで作っているUIパーツについては事前にヘッダ側でIBOutletを含むプロパティを作成して接続済みにしておきましょう。
PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字
 | HOME | Tiny3D 3.6公開 »