0

NavigationController をサブクラス化し、次のコードを追加しました。

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskLandscapeLeft |UIInterfaceOrientationMaskPortrait;
} 
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeLeft;
}

私は2つのView Controllerを持っています。回転機能なしで、横向きモードと縦向きモードを強制するにはどうすればよいですか? (すべての序列が plist で有効になっています)

4

3 に答える 3

0

そのため、多くのトレイルとエラーの後、私が使用できるソリューションを見つけました。

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 を識別する方法があるかもしれません。その方法を知りたいです。また、このソリューションで問題が見つかった場合もお知らせください。ありがとう

于 2013-05-01T11:01:22.957 に答える