頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


iPadを横向きで起動するとself.view.boundsが意図通りに取れない

頭と尻尾はくれてやる! 回転させたらframeのwidthがなんか違う?
↑ここで画面のサイズを取得するのにself.view.frameじゃなくてself.view.boundsを使えばいいじゃんってしてるんだけど、iPadの場合だとちょいと具合が悪いんだよね。

前にやったのと同じことをiPadでやってみるとこんな感じ(画像のサイズが若干違うけどね)。ステータスバーの有無による挙動はiPhoneの場合と同じなのでここは無しの場合だけってことで。

(1)Portraitの場合
iPad, Portrait
frame x=0 , y=0 , width=768 , height=1024
bound x=0 , y=0 , width=768 , height=1024

(2)Landscapeの場合
iPad, Landscape
frame x=0 , y=0 , width=768 , height=1024
bound x=0 , y=0 , width=1024 , height=768

Landscapeでのプロパティを見るとframeのwidthよりheightの方が大きいことがわかるよね。
ここまではいいんだよ。iPhoneの場合と同じだし。

ところがiPadの場合、iPhoneと違って横向き(Landscape)で起動できるもんだから起動直後の画面でself.view.frameとboundsを取得するとこうなるんだ。

iPad, Landscape, fixed
frame x=0 , y=0 , width=768 , height=1024
bound x=0 , y=0 , width=768 , height=1024

↑げっ!横長なのにboundsプロパティも"縦長"になってる。

iPhoneの場合はアプリのボタンを押すときはPortraitの状態になってるのでiPhoneを横向きにしてアプリをスタートさせると
willAnimateRotationToInterfaceOrientation:duration:
メソッドがコールされるのでこの後ならboundsプロパティは期待通り"横長"になってくれる。
ところが、iPadの場合に横向きでアプリをスタートさせてもこのwillAnimateRotationToInterfaceOrientation:duration:メソッドはコールされないんだよね。

それじゃあどうすんの?ってことで調べると起動時のデバイスの方向を得ることができるんだってさ。
{
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
    if (orientation == UIInterfaceOrientationPortrait) {
        NSLog(@"縦長");
    } else {
        NSLog(@"横長");
    }
}
statusBarOrientationプロパティで得ることができるのか、、、まさかと思ってステータスバーを非表示で動作確認してみたけどちゃんと取得できたよ。これでなんとかなりそうだね。
スポンサーサイト

<< iPhoneのタブバーをフラットデザインっぽく変えてみる  TopPage  ナビゲーションバーの色(png画像)を即時変える >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/788-e3cedca1




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad