3

メインビュー(通常と逆さまの両方)でのみポートレートになるアプリを構築しています。Project Settings/Plist でこの設定を行ったところ、すべて正常に動作しました。ただし、画像/ビデオの表示などを行ういくつかのモーダル ビューがあり、それらをすべての方向に回転できるようにしたいと考えています。

UINavigationController のカテゴリを追加しようとしましたが、うまくいきませんでした。また、モーダルを呼び出す viewController に以下のコードを追加しました。

-(BOOL)shouldAutomaticallyForwardAppearanceMethods{
    return NO;
}
-(BOOL)shouldAutomaticallyForwardRotationMethods{
    return NO;
}

すべての向きを許可するモーダル viewControllers に以下のコードを追加しました。

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}

私は何が欠けていますか?助言がありますか?

4

2 に答える 2

3

iOS 6 では、回転処理が変更されました。あなたが説明した問題には、いくつかのアプローチがあります。まず、plist で、縦向き逆さま以外のすべての向きを有効にします。

次に、次のいずれかの解決策を使用できます。

  1. 縦方向への回転のみを許可する UINavigationController のサブクラスを使用します。
  2. すべてのコントローラーについて、サポートする回転を指定します。
  3. アプリケーション デリゲートでメソッドをオーバーライドできます。このメソッドは、向きが変わるか、新しいビュー コントローラーがプッシュされるたびにデリゲートで呼び出されるため、アプリの横表示を一時的に有効/無効にするために使用できます。

    // In AppDelegate.h:
    @property (nonatomic) BOOL portraitOnly;
    
    // In AppDelegate.m:
    - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
    {
        return _portraitOnly ? UIInterfaceOrientationMaskPortrait : UIInterfaceOrientationMaskAllButUpsideDown;
    }
    
    // to switch to portrait only:
    ((AppDelegate *)[UIApplication sharedApplication].delegate).portraitOnly = YES;
    
    // to switch to allowing landscape orientations:
    ((AppDelegate *)[UIApplication sharedApplication].delegate).portraitOnly = NO;
    
于 2013-04-25T10:44:07.780 に答える
1

ビルド設定で階層の先祖であるviewControllerの回転を有効にする必要があります(階層の下位のVCが必要に応じて回転できるようにするため)。そして、各viewControllerで、、、shouldAutoRotateおよびsupportedInterfaceOrientationsから適切なロジックを返します。willAnimateRotationToInterfaceOrientation

shouldAutoRotate-まったく動かないviewControllerに対してNOを返す。

- 同様に、 から YESshouldAutoRotateを返し、その VC で有効な方向をから返します。supportedInterfaceOrientations

willAnimateRotationToInterfaceOrientation-新しい方向が表示される前に必要な最後のクリーンアップまたはデータ変更を行うために使用します。

それでも問題が解決しない場合は、お気軽にお知らせください。それが役に立てば幸い!

于 2013-02-20T20:47:13.883 に答える