7

iPhone アプリケーションを iPad で実行すると、向きの変更のサポートに関して奇妙な動作が表示されます。

アプリはビュー コントローラー (引数のためにビュー A と呼びます) とナビゲーション コントローラーで起動し、shouldAutorotateToInterfaceOrientation は縦向きの場合のみ YES を返します。ナビゲーション コントローラーにビュー コントローラー (ビュー B) をプッシュします。ビュー コントローラーは、縦向きの場合のみ YES を返します。次に、すべての回転をサポートするナビゲーション コントローラーに別のビュー コントローラー (ビュー C) をプッシュし、回転する方向に基づいて画面上のアイテムを調整します。

これを iPhone シミュレーターとデバイスで実行すると、ビュー C で横向きに回転し、[戻る] ボタンをタップしてビュー B に戻ると、正しい動作が行われ、ビュー B が縦向きモードに戻ります。(シミュレーターでは、シミュレーターを自動的に縦向きに回転させます。)

私が経験している問題は、iPad シミュレーターとデバイスでまったく同じ一連のイベントを実行すると、表示されるビュー B が回転して縦向きに戻らず、ナビゲーション コントローラーがまだビュー C の情報を表示していることです。戻るボタンをタップすると、ビューは同じままですが、ナビゲーション コントローラーはビュー B に対して通常の状態を示します (ただし、すべて横向きモードのままです)。次に、戻るボタンをもう一度タップすると、ビュー A がビュー B のナビゲーション バー アイテムの下に表示され、最後にもう一度タップすると、ナビゲーション バー A のアイテムが表示されたビュー A に移動します。

iPad でビュー B に移動して回転を開始すると、縦向きモードになるまで shouldAutorotateToInterfaceOrientation が NO で起動し、その後すべてが通常に戻ります。

このアプリケーションは、iPhone SDK の最新リリース バージョンを使用してビルドされており、ビルド設定は次のとおりです: iPhone Simulator 4.0 のベース SDK、iPhone のターゲット デバイス ファミリ、iPhone OS 3.1.3 の iPhone OS 展開ターゲット。

何か案は?

4

2 に答える 2

4

アップルは次のように述べています。

ケース: UITabBarController または UINavigationController 内のすべての子ビュー コントローラーが、共通の方向セットに同意していません。

応答:すべての子ビュー コントローラーが正しく回転するようにするには、各タブまたはナビゲーション レベルを表すビュー コントローラーごとに shouldAutorotateToInterfaceOrientation を実装する必要があります。その回転が発生するには、それぞれが同じ方向に同意する必要があります。つまり、それらはすべて、同じ向きの位置に対して YES を返す必要があります。

http://developer.apple.com/iphone/library/qa/qa2010/qa1688.html

個々のビュー内ではなく、ナビゲーション コントローラー内でデバイスの向きを設定できる場合があります。次に、スタック上にあるビューを確認し、結果に基づいて回転させることができます。このようにして、ナビゲーション コントローラーはすべての向きも処理します。

于 2010-07-13T16:41:36.927 に答える
0

そのエラーを防ぐために私が使用しているコードは次のとおりです。

- (void)viewDidLoad {  
    if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(M_PI/2);
        self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
    }
    [UIView commitAnimations];
}

- (void)viewDidLoad {
    if (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(-(M_PI / 2));
        self.view.bounds = CGRectMake(0, 0, 320, 480);;
    }
    [UIView commitAnimations];
}

デバイスの向きに基づいて、コードの一部を変更する必要があります。

于 2010-07-15T23:45:12.833 に答える