そのため、多くのトレイルとエラーの後、私が使用できるソリューションを見つけました。
AppDelegate で:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
NSUInteger orientations = UIInterfaceOrientationMaskAllButUpsideDown;
if(self.window.rootViewController){
UIViewController *presentedViewController = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
orientations = [presentedViewController supportedInterfaceOrientations];
}
return orientations;
}
これにより、方向の制御がルート ビュー コントローラーに与えられます。
DataManager.h (または、使用している他のシングルトン.. NSUserDefaults でも実行できます。
@property (nonatomic, strong) NSString *currentView;
ViewController.m (ルート) で:
-(NSUInteger)supportedInterfaceOrientations
{
if([[DataManager sharedDataManager].currentView isEqualToString:@"Trailer"])
{
return UIInterfaceOrientationMaskLandscapeRight;
}
else if([[DataManager sharedDataManager].currentView isEqualToString:@"Menu"])
{
return UIInterfaceOrientationMaskPortrait;
}
return UIInterfaceOrientationMaskPortrait;
}
ルート ViewController から、アプリ内のすべての ViewControlles のすべての向きにアクセスできます。ViewController
一方を横向きに、もう一方を縦向きに制限したい場合に非常に便利です。各 ViewController に追加する必要があるViewWillAppear
のは、次のように ViewController に付けたい名前の内部だけです。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[DataManager sharedDataManager].currentView = @"Menu";
}
このソリューションを使用すると、回転を強制する現在の\ dissmisビューソリューションで得られるように、ビューをすばやく切り替えることに関する迷惑な警告が表示されなくなります。より良い方法で ViewController を識別する方法があるかもしれません。その方法を知りたいです。また、このソリューションで問題が見つかった場合もお知らせください。ありがとう