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

関連記事

MacPeople 最終号

2014年11月号で休刊。 1995年10月に創刊されたらしい。 最終号はiPhone6/iP

記事を読む

no image

WWDC 2011 に行ってきた

WWDC 2011に行ってきたときのメモなど。公開が遅れているうちにWWDC 2012のチケット

記事を読む

no image

Corona SDK 調査5日目

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

記事を読む

au で iPhone5 を下取りに出してきた

今ならiPhone 5を32000で買い取りしてもらえるということで、au Shop に行っ

記事を読む

no image

暗記サポートアプリ YUBImarker

暗記サポートアプリを探している。 YUBImaker はちょっと良さそうなんだけれども、なかなかiP

記事を読む

4年ぶりにLogLocationsをアップデート

4年ぶりにLogLocationsのアップデート版を作成中。3年間更新していなかったので、画面がフラ

記事を読む

[iPhone 6 Plus] カラビナ付きケースを買ってみた

iPhone5 はカラビナ付きケースに入れて腰に下げていたのだが、まだiPhone 6 Pl

記事を読む

no image

Pebble E-Paper Watch 届いた! 感想。

追記: Pebble 向けにアプリを作りました。 Kickstarter で iPhone/A

記事を読む

no image

[iPhone開発本] 基礎から学ぶ iPhoneアプリ開発 林 晃著

基礎から学ぶ iPhoneアプリ開発 という本が2010年7月24日に発売になるらしい。 題名にはま

記事を読む

Apple Watch用バッテリーロガーを公開しました

1年前に開発し、App StoreにSubmitしたものの Rejectされ続けていたアプリをその

記事を読む

Message

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

MacBook Pro Mid 2012 2TB HDD換装

子どもの吹奏楽の演奏や、自分のテニスの動画を撮影することが増えてきて

2万円で買える25軸ロボット プリメイドAI 購入

大幅値下げで驚きの安さの25軸ロボットを購入。 https:

HDD交換後「この製品のライセンシングが動作していません」で Photoshop CS4が起動しない問題

HDD交換後に毎度この問題が発生するが、今回も 「この製品のライセン

YouTubeの窪田テニス教室でテニス学習中

15年以上テニススクールに通っているが、スクールにシングルス

LogLocations 1.4.0 写真表示対応

行動ログは取りたいが、何も操作したくない。という自分のようなずぼらな

→もっと見る

PAGE TOP ↑