[iOS SDK] LandscapeとPortraitで xib ファイルを切り替える方法

公開日: : iPad, iPhone

自分はたいていコードで位置指定するのでこれまで遭遇していなかったけれども Landscape と Portrait で xib ファイル自体を切り替えて対応する方法を調べたのでメモしてみる。

Landscape と Portrait で部品の配置などが大きく異なり、コードでの指定や AutoLayoutでの指定が面倒なときにこの方法を使うことになると思われる。

そもそも今はこういうxibを指定する書き方はしないという話もありそうだけれども。いまだに昔からの書き方でやっている。

iphone – Easiest way to support multiple orientations? How do I load a custom NIB when the application is in Landscape? – Stack Overflow

にある、下記のコードで対応できた。

- (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: の対応が必要となりました。

関連記事

Xcode6 Localization

久しぶりに新アプリを作っていて、完成が近づいてきたので最後にLocalizeを行っている。 た

記事を読む

no image

[iPhone SDK] iPhone SDK で Singleton

自分でもよく忘れるので、備忘録的に書いてみる。 iPhone SDKで開発をしていて、時々シングルト

記事を読む

no image

Lexical or Preprocessor issue ‘xxx.h’ file not found

NSMutableArray に要素をランダムに並び替える機能を入れようと思い、 objective

記事を読む

LogLocations 1.4.5 リリース

LogLocations 1.4.5 をリリースしました。 LogLocat

記事を読む

no image

いまさらながらXcode4導入 2011/06/29

Twitterを見ているといろいろ大変そうだったので敬遠していたXcode4だが、デバッグに便利そう

記事を読む

[iOS8] BlocksKit で不具合発生

iOS8 にアップデートしたところ、BlocksKit の UIAlertView と UI

記事を読む

ケンジントン スマホ車載マウント

気に入っているのだが2年以上経って経年変化のためかくっつかなくなってしまったので買い直した。 Ama

記事を読む

no image

[iOS SDK] SSPieProgressView を使ってみた

iOS オープンソースライブラリ徹底活用 菊田剛著 秀和システム | DevCafeJp で紹介さ

記事を読む

no image

iOS4プログラミングブック の感想など。

前評判によるとかなりの力作のようなので、久しぶりにiOSの本を買ってみた。 ソースコードはすでに発売

記事を読む

no image

unite スマートベース SmartBase for iPhone

しばらく前に買って愛用していて、今回もう1台買ったので紹介。iPhone 3G/3GS用と、

記事を読む

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Ember Mug 2のACアダプタをUSB Type-Cに変えてみた

冬になると活躍する Ember Mug 2 の充電器は付属のACアダ

Wi-Fi6Eルータ TP-Link AXE5400購入

Wi-Fi6E を試してみたくなり、TP-Link AXE5

児童手当 認定請求書申請 2024 「請求者が養育をする18歳に達する日以降の最初の3月31日までの子の数」とは?

2024年に受給していない人には手紙が届くらしい。 電子申請も

Vision Proアプリ開発本 8/24、8/26に発売

Vision Proアプリ開発入門 P400が 8/24 に発売、V

Developer Strap が日本でも購入可能に

USアカウントでしか購入できなかった Vision Pro 用 De

→もっと見る

PAGE TOP ↑