Photo: UXmosis
未だかつて無い速度で、iOS 6、iPhone 5対応に奔走している、するぷ( @isloop )です。
現在の画面サイズを取得する際、つまりself.view.bounds.size.widthなどで横幅を取得する際、最初からランドスケープモードだと、480のはずが320になってたりしてました。(loadViewやviewDidLoadで取得)
「バグか・・・。しっかりしてよAppleさん・・・。」
とか思ってたら、viewWillAppearで取得すればキチンと取得できるという記事を発見・・・!
ホンマや!ありがとう!プログラミングノートさん!
ViewDidLoadでself.view.frameを取得したら、ランドスケープの時widthとheightが逆なので、いちいち自分で入れ替えをしてステータスバー分を計算に入れ、portrateSize_ と landscapeSize_ というCGSizeを作って使い回していた。下記サイトのによるとViewDidLoadではなくviewWillAppearで取得すべきなのだという。初歩的なことだったろうが僕は知らなかった。
引用元:スクリーンサイズの取得はviewWillAppearですべきと今更ながら知る « プログラミング・ノート from smallmake
まったく同じ事してましたよ・・・。
さっそく、viewWillAppearでself.view.bounds.size.widthを取得してみたらあっさりランドスケープモードの横幅が取得できたじゃねーの。
やっとポートレートモードだった場合とランドスケープモードだった場合の分岐が爽やかに書けたぜ・・・。
-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; if(self.view.bounds.size.width == 320){ NSLog(@"ポートレートモードだった場合。"); } else{ NSLog(@"ランドスケープモードだった場合。"); } }
いらない処理がごっそりカットできてご満悦。
プログラミングノートさんありがとうございました!