6792041360 847de6fc10 b

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(@"ランドスケープモードだった場合。");
	}
}

いらない処理がごっそりカットできてご満悦。

プログラミングノートさんありがとうございました!