1

これらのメソッドを実装するために、UINavigationControllerをオーバーライドしました。

-(BOOL)shouldAutorotate
{
    return [[self.viewControllers lastObject] shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
    return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}

最初のビューから、このMSNavigationPaneViewControllerをここにモーダルに表示します。これはFacebook側のスライド式タブバーコントローラーのようなものです。

アプリの残りのビューがポートレートのみであるのに対し、ここに表示されるビューコントローラーの1つをランドスケープのみで表示する必要があります。

したがって、他のすべてのViewControllerに次のものを追加しました。

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}
- (BOOL)shouldAutorotate
{
    return UIInterfaceOrientationMaskPortrait;
}

そして、私が追加したランドスケープが欲しいものに:

- (BOOL)shouldAutorotate
{
    return UIInterfaceOrientationMaskLandscape;
}
-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

ただし、すべてのビューが回転します。

これらの他のビューでNOに変更shouldRotateすると、それらは縦向きのままになり、横向きにしたいビューは回転できますが、それ自体を回転させることはできません。また、一度回転すると、別のビューにshouldRotate = NO;戻ると、ポートレートに戻すことはできません。

私はこれに何時間もいて、それを機能させることができません。

ありがとう

編集 - - -

私は今この半分を機能させており、ここで自動回転を機能させるための新しい質問を開始しました

4

3 に答える 3

5

shouldAutorotateで何を返すか混乱しているようです。例として次のコードを使用します。

iOSは、加速度計からのイベントに応答してアプリのshouldAutorotateを呼び出しているため、新しい方向をすでに認識しています。アプリが「はい」と答えた場合、iOSは現在の向きをサポートされているもののリストと照合し、アプリが現在の向きを照会せずに決定を下すことができます。

// iOS 6

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

また、モーダルビューコントローラを表示するビューコントローラに回転を通知させることができます。使用:presentViewController:animated:completion:ビューコントローラーを表示します。presentModalViewController:animated:偶然に使用している場合、非推奨になります。

を追加する場合はapplication:supportedInterfaceOrientationsForWindow:、必ず以下のコードガイドラインに従ってください。ドキュメントには、VCに実装する場合supportedInterfaceOrientationsは、アプリデリゲートをオーバーライドする必要があると記載されています。rootViewControllerただし、メインウィンドウにを追加する方法に違いがあることに人々は気づいています。

使用する:

window.rootViewController = viewController

それ以外の:

[window addSubview:viewController.view];
于 2012-12-17T23:37:14.157 に答える
2

私はこのようにこれをしました

-(BOOL) shouldAutorotate{
    return YES;
}

-(NSUInteger) supportedInterfaceOrientations{
    if ([self.visibleViewController isKindOfClass:[ZoomPictureViewController class]]) {
        return UIInterfaceOrientationMaskAll;
    }
    return UIInterfaceOrientationMaskPortrait;
}

Xcodeの方向ボタンをクリックして、必要な方向を有効にし、supportedInterfaceOrientationsメソッドで方向を返すことを確認してください。

于 2012-12-18T07:05:32.390 に答える
1

まず、Xcodeの方向ボタンをクリックして、必要な方向を有効にしていることを確認します。次に、iOS 6で発生したすべてのバグと問題をグーグルで検索し、さらに数時間かけてさまざまな手法を試します。

この投稿にはいくつかの手がかりが含まれていますが、問題の最後の言葉にはほど遠いです。

特に、「ルートビューコントローラー」を識別し、各ビューコントローラーに実装するのではなく、ほとんど(すべてではない)の回転コントロールをそこに集中させる必要があることに注意してください。

于 2012-12-17T23:57:50.143 に答える