[iOS SDK] LandscapeとPortraitで xib ファイルを切り替える方法
自分はたいていコードで位置指定するのでこれまで遭遇していなかったけれども Landscape と Portrait で xib ファイル自体を切り替えて対応する方法を調べたのでメモしてみる。
Landscape と Portrait で部品の配置などが大きく異なり、コードでの指定や AutoLayoutでの指定が面倒なときにこの方法を使うことになると思われる。
そもそも今はこういうxibを指定する書き方はしないという話もありそうだけれども。いまだに昔からの書き方でやっている。
にある、下記のコードで対応できた。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if( !nibNameOrNil ) { nibNameOrNil = [self nibNameRotated:[[UIApplication sharedApplication] statusBarOrientation]]; } self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; return self; } - (NSString*) nibNameRotated:(UIInterfaceOrientation)orientation { if( UIInterfaceOrientationIsLandscape(orientation)) { return [NSString stringWithFormat:@"%@-landscape", NSStringFromClass([self class])]; } else { return [NSString stringWithFormat:@"%@", NSStringFromClass([self class])]; } } -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { NSString *nibname = [self nibNameRotated:toInterfaceOrientation]; [[NSBundle mainBundle] loadNibNamed:nibname owner:self options:nil]; [self viewDidLoad]; }
呼び出し側は
xxxViewController *viewC = [[xxxViewController alloc]initWithNibName:nil bundle:nil];
のように、引数 nil で呼び出すことを想定している。
また、Landscape 用の xib ファイルは xxxViewController-landscape.xib とする。
基本的にはAdam氏の方法で対応できるのだが、最初からLandscape状態で呼び出されたときにwillRotateToInterfaceOrientation: が呼ばるまで Portrait状態になってしまうのでinitWithNibName: の対応が必要となりました。
関連記事
-
-
iPhone開発のネタ帳: コールアウト代用部品を作る
Map Kit を使うと、地図上に吹き出しのようなものを表示できる。この吹き出しのようなものをコ
-
-
Apple Event Sep 2021
ついに後数時間で Apple Event 2021.09.15 がある。 今年は何かサプライ
-
-
MacPeople は2014年10月号からスマホアプリ開発者向け雑誌に?
。 最近 MacPeople の記事がずいぶんアプリ開発者寄りだなと思っていたところ、2014
-
-
auからUQモバイルに乗り換えてみた
今更ながら、auからUQモバイルに乗り換えてみた。 以前はキャリアを乗り換え
-
-
[iPhone SDK] Apple Push Notification を利用したアプリをサポートする Easy APNS
以前 apns-php を使ってApple Push Notification を実行する話を書いた
-
-
Corona SDK本が出るらしい 「Corona SDK」ハンドブック2011
値段的に一般人向けではないけれども、Corona SDK 本が出るらしい。 自分がCorona SD
-
-
[iPhone SDK] Objective-C 2.0 のプロパティ
Objective-Cのプロパティで時々はまるので、メモ。(詳解 Objective-C 2.0 P
-
-
MangaONEでARMS読み放題期間延長
MangaONE で2015/12/29まで皆川亮二氏の名作ARMSが読み放題、ということで暇をみ
-
-
[iOS SDK] 物書堂の辞書アプリと連携してみた
物書堂は使い勝手のよい辞書アプリをたくさんリリースしている会社だ。 今作っている英単語学習アプリで