[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: の対応が必要となりました。
関連記事
-
-
自作アプリを売り買いできる Apptopia
Apptopia というところからメールが来たので調べてみたところ、どうやらAndroid
-
-
RPG風タスク管理アプリ EpicWin
Designed for Use を読んでいて、例として紹介されていたので試しに買ってみた RP
-
-
iPhone開発のネタ帳: UIPopoverController に UIPickerView をいれる
iPad から追加された部品の一つに、UIPopoverController がある。 iPadが
-
-
謎のエラー iPhone/iPod Touch: application executable is missing a required architecture
リズムくん Ver.1.1の App Store への Submit の際に、謎のエラー iPhon
-
-
iPad用ケース TUNESHELL for iPad
iPadは使ってないとき机の上に置くと意外に場所を取る。どう置くかは工夫のしどころだと思われる。 ま
-
-
WatchKitのAVSpeechSynthesizerで音が鳴らない
自作英単語学習アプリ EverLearn には watchOS用アプリがあり、iOS側でまちがった
-
-
iPhone開発のネタ帳: sonsongithub の PopupView を使ってみた
自作アプリで sonson 氏の PopupView を使わせていただいてます。 Softwar
-
-
iPad/iPad2 収納ケース Built Neoplene Envelope
iPad を買って以来使い続けているBuiltのケースです。 Netbook Envelope とい
-
-
[iPhone SDK] iPhone SDK で Singleton
自分でもよく忘れるので、備忘録的に書いてみる。 iPhone SDKで開発をしていて、時々シングルト
-
-
EverLearnのURLスキーム
EverLearn の URL スキームをちゃんと公開していなかったので公開しました。EverLea