[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: の対応が必要となりました。
関連記事
-
-
[iOS SDK] UIAlertView が消えた後にキーボードが表示される
昔書いたコードで、UIAlertView に setAlertViewStyle で UIAlert
-
-
Apple買収後の TestFlight を利用してみた
TestFlight は昔から利用していたが、2014年に Apple に買収 されてしまった。その
-
-
新型 su-pen 購入
新型Su-penを買おうと思いAmazonのカートに入れていたら、翌日見たら売り切れていた...
-
-
iPhoneアプリ 「リズムくん」 Ver.1.1 アップデート
リズムくん Ver.1.0ではまずは8分音符までの問題でリリースしてみましたが、やはりより難しい問題
-
-
Generic Xcode Archive 問題
久しぶりに自作アプリ Reibun のアップデート版を App StoreにSubmitしようとおも
-
-
[iOS 開発本] iOSフラットデザインの作法
iOS7で採用されたフラットデザインに関して、個人的には Windows 8のMetroのイ
-
-
MacFan 2017年5月号でアプリ紹介されました
Mac Fan 2017年5月号 でおんぷちゃん for iPad を紹介していただきました。ありが
-
-
[iOS SDK][Kindle] iOS7開発テクニック集 Xcode編
iOS7開発テクニック集 Xcode編 ZuvolaZuvola 2014
-
-
[Xcode] Interface Builder でControl+ドラッグでOutletが作成できない
たまにInterface Builder でUI作っているとはまるのでメモしておく。 Xco
-
-
iPhone/iPad にMIDIキーボードを接続する
iPhone や iPad に MIDI キーボードが接続できると、実際のキーボードをつかって操作が