[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 5を買ってきた
2012年9月21日8時に発売されたiPhone5、自分はヨドバシカメラで予約したのだけれどもちょっ
-
-
iPhoneゲーム開発ワークショップ 翔泳社 PJ Cabrera
以前紹介した、iPhone Games Projects の翻訳本「iPhoneゲーム開発ワークショ
-
-
[iPhone SDK] アクションメソッドの種類
UIKitのコントローラは、3種類のメソッドで呼び出すことができる。 いつもこれを忘れてしまうので、
-
-
iOS開発におけるパターンによるオートマティズム の感想
タイトルを見ていまいち内容が類推できなかったのもあり買うつもりはなかったのだが、fladdict
-
-
[iOS] アプリ名にiPadと入れてRejectされた話
新作 iPad アプリを App Store に Submit したところ、Reject されたので
-
-
unite スマートベース SmartBase for iPhone
しばらく前に買って愛用していて、今回もう1台買ったので紹介。iPhone 3G/3GS用と、
-
-
iTunes Connect の支払先をCitibankに変更
iTunes Connectからの送金を三井住友銀行の口座で受け取っていたが、毎月4000円の手数料
-
-
Cocos2dで作る iPhone&iPadゲームプログラミング
ついに良さそうなcocos2d本が出るらしい。6/24(金)発売予定。488ページ、3980円。 し
-
-
おんぷちゃん for iPad 1.3.3 Submit
今回は紅白歌合戦を見ながらSubmit。 相変わらずうちの娘が譜読みに苦労していて新しい曲を弾く
-
-
おんぷちゃん for iPad リアル鍵盤で回答
おんぷちゃん for iPad は五線譜上に表示される音符をスクリーン上のキーボードや、USBやB