コメントを書きますが、できないので、これを回答として投稿します。
これは私のシナリオでした:
私のアプリは特定のビューでのみ方向の変更をサポートしていますが、必要なビューだけでそれを行う方法がわかりませんでした。その後、この質問にたどり着き、mientus の回答 (ありがとう) を見て、先に進んで何をしましたか彼は、どれが UITabBarController のサブクラスであり、これらのメソッドをオーバーライドすることを提案しました:
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
NSLog(@"AUTO ROTATE IN CUSTOM TAB BAR");
// You do not need this method if you are not supporting earlier iOS Versions
return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}
-(NSUInteger)supportedInterfaceOrientations{
NSLog(@"supportedInterfaceOrientations IN CUSTOM TAB BAR");
if (self.selectedViewController)
return [self.selectedViewController supportedInterfaceOrientations];
return UIInterfaceOrientationMaskPortrait;
}
-(BOOL)shouldAutorotate{
NSLog(@"shouldAutorotate IN CUSTOM TAB BAR");
return [self.selectedViewController shouldAutorotate];
}
次に、各View Controller内に、回転が必要かどうかを示すメソッドがあります。UITabBarController のメソッドは呼び出されていましたが、viewcontroller のメソッドは呼び出されていなかったため、不要な場所で回転が発生していました。次に、UINavigationController をサブクラス化し、このように見えるように supportedInterfaceOrientation のこの変更のみで同じメソッドをオーバーライドします。
- (NSUInteger)supportedInterfaceOrientations{
NSLog(@"supportedInterfaceOrientations IN CUSTOM NAV BAR CALLING CURRENT VIEW CONTROLLER");
UIViewController* presented = [[self viewControllers] lastObject];
return [presented supportedInterfaceOrientations];
}
これが基本的に行うことは、現在のView Controllerを取得してから、サポートされている方向を要求し、ViewControllerのメソッドが呼び出されて、必要な方向を処理できることです。