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

関連記事

The file XXX couldn’t be opened because you don’t have permission to view it.

The file XXX couldn't be opened because you d

記事を読む

no image

iPhone SDK アプリケーション開発ガイド

iPhone SDK アプリケーション開発ガイド(原題 iPhone SDK Application

記事を読む

おんぷちゃん for iPad 1.9.0が異常終了する

ユーザの方から下記の連絡がありました。 おんぷちゃんfor iPadを使用させて頂いておりま

記事を読む

no image

iPhoneアプリをぬるぬるとつくろう。

かごおたさんのこの記事 はポイントが簡易にまとまっていてiPhoneアプリを作り始める際にはよい

記事を読む

Apple iPad まとめ

(2010/01/28 朝5時あたりのapple.comのトップページ) 2010/01/27(水

記事を読む

no image

iPad スタンド SANWA SUPPLY MR-IPADST1 感想

以前書いた、iPad スタンド SANWA SUPPLY MR-IPADST1 が届いて、しばらく使

記事を読む

no image

薄い iPad2用ケース eggshell for iPad2 TUN-PD-000079 購入 2011/06/27

不具合報告があったので、当初予定がなかったiPad2を購入。 それはまた別に書くとして、まずは一緒に

記事を読む

no image

スティーブ・ジョブズの王国 ― アップルはいかにして世界を変えたか?

Amazonからおすすめされてたまたま発見した本。2010年11月12日発売らしい。 原書はRetu

記事を読む

no image

[iPhone SDK] iAd 組み込みでひっかかったこと

iAd は iAd Programming Guide を読んだりすればとても簡単にアプリへの組み込

記事を読む

no image

Corona SDK 調査5日目

スクリプト言語による効率的ゲーム開発を読み進めている。 そろそろソースコードを読んでみようと思って本

記事を読む

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 ↑