ViewController単位で画面の向きを変えてみる

公開日: : iPhone, IT, Mac


ViewController毎に画面の向きを変えたい!ということがあったのでやってみました。

やりたいこと

1つのアプリで全ての画面において縦にするとか、縦・横両方対応するとかではなくて。
「ある画面の時には縦、ある画面の時には横と決めたい」
ということがあったので調べてみました。

実装

以下の2つのメソッドをViewControllerに用意すればOKです。

 //回転処理の有無
 - (BOOL)shouldAutorotate {
    return NO;
 }
 //サポートしている方向
 - (NSUInteger)supportedInterfaceOrientations {
	//以下の場合は縦
    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
 }

上記の例だと縦になりますが、他に以下のようなのもあります。

UIInterfaceOrientationMaskPortrait縦(ホームボタン下)
UIInterfaceOrientationMaskLandscapeLeft横(ホームボタン左)
UIInterfaceOrientationMaskLandscapeRight横(ホームボタン右)
UIInterfaceOrientationMaskPortraitUpsideDown縦(ホームボタン上)
UIInterfaceOrientationMaskLandscape横表示
UIInterfaceOrientationMaskAllButUpsideDown縦(ホームボタン上)以外
UIInterfaceOrientationMaskAll全方向

これにより各ViewControllerは設定されたOrientationで表示されるようになります。

注意点

ただ、上記で出来るのですが他との関係性が結構厄介で一度つまりました。

例えば、UINavigationControllerなどを使っていると、そこに追加しているViewControllerで上記の設定をしても効果はありません。

実際のUINavigationControllerの設定に依存するためなので、UINavigationController自身のshouldAutorotateメソッド、supportedInterfaceOrientationsメソッド自体が呼ばれた時に、追加しているViewControllerのメソッドを呼び出す必要があります。

では、UINavigationControllerをカスタマイズして上記のメソッドを以下のように呼び出せばいいって話になるのかな?となります。

 - (NSUInteger)supportedInterfaceOrientations {
    return self.topViewController.supportedInterfaceOrientations;
 }

しかし!
AppDelegate.mで以下のようにしていると「この画面では横にしよう」などといったことをやるのは厳しいです。

    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:svc];
    [self.window setRootViewController: nc];

というのも全てUINavigationControllerに追加されているViewControllerになるためです。
というわけで、ここらへんが最初気が付かずに結構つまりました。

広告

関連記事

no image

ターミナルでgitのコマンドを補完したりブランチ名を表示する – macでgitを便利に使うために –

* やりたいこと macのターミナルでgitをいじっていると -今のブランチってなんだっけ? -g

記事を読む

no image

iPhoneアプリ開発 −遷移先のViewControllerに値を引き継ぎたい−

例えば、トップページに複数個のボタンがあって、「A」と「B」というボタンを押下した際に、同じView

記事を読む

no image

さくらのVPSでJenkins -執事さんとご対面-

さくらのVPSを利用している方は多いかと思います。 私も、自分で遊ぶ用(開発用)として借りてみまし

記事を読む

iPhoneアプリ開発 芳名帳アプリ作成(2) -記帳画面作成-

* 今までの流れ - * 画面構成 今回の芳名帳アプリは以下の画面で構成しています。 -

記事を読む

no image

CakePHPのモデルのキャッシュではまった -新しく追加したカラムに値が入らない-

タイトルのとおり、ちょこっとCakePHPではまったのでメモ。 * 作業内容 -MySQLで、ある

記事を読む

no image

Androidアプリ開発 -画像を加工してセピア色にしてみる-

* やりたいこと ギャラリーから選んだ画像を加工してセピア色にしたい * ソース ** 画像を取得

記事を読む

no image

jQuery Mobileの1.0Beta3、1.0RC1で起きた現象 -iOS5で動かない!?-

最近おきたjQuery Mobile周りについてのメモ。 本来なら色々チェックしてちゃんと原因を調

記事を読む

no image

iPhoneアプリ開発 芳名帳アプリ作成(3) -名前を書けるようにする-

* 今までの流れ - -[http://pplace.jp/2013/06/1531/:title=

記事を読む

dl-1

CakePHP2系にTwigを導入

CakePHP2系でも慣れているSmartyを使おうと思ったものの、良いプラグインが見つからず断念。

記事を読む

iPhoneアプリにGoogle Analyticsを入れてみる -Google Analytics SDK for iOS導入-

* 導入経緯 iPhoneアプリをリリースして、を使って「ランキング」や「ダウンロード数」は適宜チ

記事を読む

広告

Message

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

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

広告

no image
[感想] Effective Objective-C 2.0 ☆☆☆☆★(4.5)

* 構成 - 第1章 Objective-Cに慣れる -

no image
[感想] iOSアプリテスト自動化入門 ☆☆☆(3.0)

* 構成 - Chapter 1 テスト自動化への取り組み

DeployGateを試してみた(iOS編) -DeployGateがiOSに対応-

今までのDeployGate - -[http://pplace.

iPhone/iPadアプリを開発するためにやったこと

今までに、iPhoneを3本ほどリリース((リリースしたアプリは全て1

no image
ターミナルでgitのコマンドを補完したりブランチ名を表示する – macでgitを便利に使うために –

* やりたいこと macのターミナルでgitをいじっていると -今の

→もっと見る

PAGE TOP ↑