Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

UIViewController iOS6での画面回転への対応

More than 5 years have passed since last update.

iOS6での画面の回転は、TARGETSのSupported Interface Orientationsでの設定に加えて、各ViewControllerでの設定も必要になります。
SS

UIKitのUINavigationControllerやビューコントローラをモーダルで表示したいときなど、わざわざ回転のためだけに継承するのも煩雑ですので、カテゴリでオーバーライドして対応するのが簡単そうです。

UINavigationController

viewControllersの末尾の要素(現在表示されているビューコントローラ)と同じ画面の回転をサポートするようにする。

UINavigationController+Rotation.m
@implementation UINavigationController (Rotation)

- (NSUInteger)supportedInterfaceOrientations
{
    return [self.viewControllers.lastObject supportedInterfaceOrientations];
}

- (BOOL)shouldAutorotate
{
    return [self.viewControllers.lastObject shouldAutorotate];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return [self.viewControllers.lastObject preferredInterfaceOrientationForPresentation];
}

@end

http://stackoverflow.com/questions/12526410/ios-6-viewcontroller-is-rotating-but-shouldnt

UIActivityViewController

例はUIActivityViewControllerですが、ビューコントローラをモーダルで表示する場合は以下で対応出来ます。
UIActivityViewControllerをモーダル表示しているビューコントローラと同じ画面の回転をサポートするようにする。

UIActivityViewController+Rotation.m
@implementation UIActivityViewController (Rotation)

- (NSUInteger)supportedInterfaceOrientations
{
    return [self.presentingViewController supportedInterfaceOrientations];
}

- (BOOL)shouldAutorotate
{
    return [self.presentingViewController shouldAutorotate];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return [self.presentingViewController preferredInterfaceOrientationForPresentation];
}

補足

class-dumpして確認しましたが、3つのメソッドは

@interface UIViewController : UIResponder <NSCoding, UIAppearanceContainer>

で宣言されており、カテゴリでオーバーライドしても問題なさそうです。(カテゴリでの宣言をカテゴリでオーバーライドしているわけではないので)

yusuga
iOS Engineer.
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away