3

この問題に対する答えを探すために多くの方法を試しましたが、多くの場合、主UINavigationControllerにルート ビュー コントローラーで s を使用して回転の問題をロックしています。

私のプロジェクトでは、UIViewControllerView Controller Containment を使用するカスタムがあります。-(BOOL)shouldAutomaticallyForwardAppearanceMethodsまたはメソッドは実装しませんでした。-(BOOL)shouldAutomaticallyForwardRotationMethodsこれらはデフォルトの実装であり、どちらもすでに を返しているためですYES-(BOOL)shouldAutorotateが実装されて返されYESます。

表示される最初のビュー コントローラーは、すべての向きをサポートします。これは意図したとおりに機能しています。

セグエ中に最初のView Controllerの代わりにロードされる2番目のView Controllerには、条件付きの向きがあります。UIPageViewControllerView Controller は基本的に、PDF のページを表示するためのを含む View Controller です。条件付き方向は、PDF の方向の方向です。このメソッドは、PDF が横向きの場合、またはPDF が縦向きの場合に-(NSUInteger)supportedInterfaceOrientations戻ります。このメソッドは呼び出されます。それでも、私のセグエでは、次のように呼び出します。UIInterfaceOrientationMaskLandscapeUIInterfaceOrientationMaskPortrait

[container transitionFromViewController:source 
           toViewController:dest 
           duration:1.0 
           options:UIViewAnimationOptionTransitionFlipFromRight 
           animations:^{} 
           completion:^(BOOL finished){/*relevant removal of vc's from parents*/}];

メソッドは、サポートされている向きを呼び出しますが、それらを適用していないようです。使えます[[UIDevice currentDevice] performSelector:@selector(setOrientation:) withObject:(__bridge id)(void *)[dest preferredInterfaceOrientationForPresentation];が、このアプリはストアアプリになる可能性があるので避けています。

どんな提案でも大歓迎です。

4

1 に答える 1

0

ほとんどの場合、 UINavigationController の回答でセットアップが完了します。私が過去に使用したトリックが 1 つあります。私の親 VC では、次のメソッドを実装しています。

- (UIViewController *)topViewController {
    return self.childViewControllers.lastObject;
}

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

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

これはある程度機能しますが、2番目のView Controllerの制限を尊重する前に、サポートされている向きに回転する必要があります. が呼び出される- (BOOL)shouldAutorotateまでNO を返すのがコツです。viewDidAppear:このようなもの:

- (BOOL)shouldAutorotate {
    return _viewDidShow ? YES : NO;
}

次に、遷移メソッドを呼び出す前に、次のように呼び出します。

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO];
于 2013-05-22T03:32:57.097 に答える