私はMSNavigationPaneViewController
ここから使用していて、回転のようなものが機能しています。ルートの回転メソッドをオーバーライドしましたUINavigationController
-(BOOL)shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (appDelegate.topViewController != nil) {
return [appDelegate.topViewController supportedInterfaceOrientations];
} else {
return UIInterfaceOrientationMaskPortrait;
}
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (appDelegate.topViewController != nil) {
return [appDelegate.topViewController preferredInterfaceOrientationForPresentation];
} else {
return UIInterfaceOrientationPortrait;
}
}
MSNavigationPaneViewController
これを使用してプッシュするとpresentViewController: animated:completion:
、回転が機能するため、特定のビューの向きが異なる場合があります。問題は、向きが異なる各ビューでは、ユーザーが電話を傾けて向きを変更する必要があり、その時点で正しい向きにロックされます。これを機能させるためにたくさんの読書をしました。各ビューが読み込まれる前に起動する必要があるようですがpreferredInterfaceOrientationForPresentation
、起動していません。MSNavigationPaneViewController
を使用してViewControllerを変更していないため、起動していないと思いますpresentViewController
。MSNavigationPaneViewController
これは、ビューを変更するために使用されるコードです
- (void)setPaneViewController:(UIViewController *)paneViewController
{
if (_paneViewController == nil) {
paneViewController.view.frame = _paneView.bounds;
_paneViewController = paneViewController;
[self addChildViewController:_paneViewController];
[_paneView addSubview:_paneViewController.view];
[_paneViewController didMoveToParentViewController:self];
} else if (_paneViewController != paneViewController) {
paneViewController.view.frame = _paneView.bounds;
[_paneViewController willMoveToParentViewController:nil];
[self addChildViewController:paneViewController];
void(^transitionCompletion)(BOOL finished) = ^(BOOL finished) {
[_paneViewController removeFromParentViewController];
[paneViewController didMoveToParentViewController:self];
_paneViewController = paneViewController;
};
[self transitionFromViewController:_paneViewController
toViewController:paneViewController
duration:0
options:UIViewAnimationOptionTransitionNone
animations:nil
completion:transitionCompletion];
}
}
これは、viewControllerを切り替えているだけなので、呼び出していないように見えますpreferredInterfaceOrientationForPresentation
強制的preferredInterfaceOrientationForPresentation
に呼び出される方法や、隠されたビューによって呼び出されるように騙す方法はありますか?
ありがとう
編集 - -
私は、新しいローテーションシステムがiOS6でどのように機能するか、そしてそれを管理するのは根本的なことであることを完全に理解しています。ただしpreferredInterfaceOrientationForPresentation
、次のビューがpresented
正しいメソッドの1つを使用している場合にのみ呼び出されるようです。ウィンドウが切り替えられたばかりの場合は違います。だから私は実際にこれをだまして呼び出される方法が必要です。