[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: の対応が必要となりました。
関連記事
-
-
Pebble E-Paper Watch 届いた! 感想。
追記: Pebble 向けにアプリを作りました。 Kickstarter で iPhone/A
-
-
[WatchKit] WatchSim 買ってみた
WatchSim Danny Keogan posted with iT
-
-
iOS Developer Program 更新(2回目)
4月はじめにiOS Developer Program の期限が切れるので、Apple から
-
-
安くなったPFUのSnapLiteを買ってみた
昔からほしかったが高くて手が出なかったPFUのSnapLiteが2018年3月に販売終了になったらし
-
-
Apple Special Event 2011
2011年は iPhone 4s が発表された。 https://japanese.enga
-
-
2009年11月発売のiPhone SDK関連書籍
11月も良さそうなiPhone SDK本が次々と発売される。 Mac OS X Cocoa プログラ
-
-
Pastebot が OSX 用になっていた
昔使っていたがいつの間にか使わなくなっていた Pastebot が、いつの頃からかiOS版がなくなり
-
-
[iPhone開発本] オライリー iPhoneアプリケーション開発ガイド 感想その1
面白そうだったので発売日に買ってみた。1995円と安いのもすばらしい。 しかしタイトルは一ひねりした
-
-
Let’s talk iPhone イベント 2011/10/04
今回のイベントも、楽しみにしながら寝て、早朝に起きてから知ることにした。 今回、事前に行われていた予
-
-
iOS用アイコンをまとめて生成する
しばらく開発してきたアプリがようやくリリースできる状態になってきたので、知り合いのデザイナーと飲み