web-dev-qa-db-ja.com

iOS 6で自動回転のためにアプリを完全に正しく機能させるにはどうすればよいですか?

IOS6では、shouldAutorotateToInterfaceOrientationは非推奨になりました。 supportedInterfaceOrientationsshouldAutorotateを使用してアプリを自動回転で正しく動作させようとしましたが、失敗しました。

このViewController回転したくないのですが、機能しません。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

何か案は?事前に助けてくれてありがとう!

17
Carina

理解した。

1)サブクラス化されたUINavigationController(階層の最上位のviewcontrollerが方向を制御します。)それをself.window.rootViewControllerとして設定しました。

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

2)ビューコントローラを回転させたくない場合

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

)回転できるようにしたい場合

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

-(BOOL)shouldAutorotate
{
    return YES;
}

ところで、あなたのニーズに応じて、別の関連する方法:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
     return UIInterfaceOrientationMaskPortrait;
}
38
Carina

ルートコントローラーとしてナビゲーションコントローラーの代わりにタブバーコントローラーを使用している場合は、同様にUITabBarControllerをサブクラス化する必要があります。

また、構文も異なります。以下を使用して成功しました。次に、上記の例を使用して、オーバーライドしたいビューコントローラーで成功しました。私の場合、メイン画面を回転させたくありませんでしたが、FAQ画面には、自然に横向きのビューを有効にしたいと思っていました。完全に機能しました。構文がself.modalViewController(ナビゲーションコントローラーの構文を使用しようとすると、コンパイラーの警告が表示されます。)これがお役に立てば幸いです。

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (BOOL)shouldAutorotate
{
    return self.modalViewController.shouldAutorotate;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return self.modalViewController.supportedInterfaceOrientations;
}
3
Jim Hankins