意識の高いLISPマシン

藤原惟/すかいゆき(@sky_y)の技術用ブログ

iOSのStoryboardでOrientationが指定通りにならないときの対処

横向き(Orientation: landscape)のiPadアプリを作っているのですが、
Storyboard上でちゃんと向きをしているつもりなのに、
ちゃんとlandscapeになってくれず数週間悩んでいました。

↑ こんな感じに指定しても、縦向きになってしまう。


今日、その解決方法が見つかったので報告します。

解決策

1. 向きを強制したいView Controllerに対して、自前のViewControllerクラスを作る。
既に自前クラスがある場合は、それを流用してOK。

(File>New>New File... で「UIViewController Subclass」を選ぶ。
UINavigationControllerとか派生クラスの場合は、その派生クラスを継承するように設定。)

ここでは MyViewController というクラスを作ったとします。


2. MyViewController.m の shouldAutorotateToInterfaceOrientation:interfaceOrientation メソッドの返り値を書き換える。
例えば、横向き(landscape)に強制したい場合は以下の通り。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    if ((interfaceOrientation == UIDeviceOrientationLandscapeLeft) ||
        (interfaceOrientation == UIDeviceOrientationLandscapeRight)) {
        return YES;
    } else {
        return NO;
    }
        
//	return YES; // 全方向に設定する場合は、単にYESを返す
}


3. Storyboard上で、向きを強制したいViewControllerのクラスを、実装した自前のクラスに変更する。
(写真では、UINavigationControllerに対して自前のStartNavigationControllerクラスを指定しています。)


以上で実行してみると、横向きに強制出来ます。