解雇呈现的视图控制器时,方向会发生变化

时间:2016-03-31 09:34:08

标签: ios objective-c iphone uiinterfaceorientation

在我的应用中,所有视图控制器都有纵向方向,除了一个。让我们把它命名为“GameViewController”。 GameViewController仅适用于横向方向。

这是我在横向模式中显示的方式:

MyViewController.m

  

它始终处于纵向方向,并且我们将展示GameViewController

- (void) showGameView {
    GameViewController *gameView = (GameViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"GameViewController"];
    [self presentViewController:gameView animated:YES completion:nil];
}

AppDelegate.m

  

这就是我们如何维护GameViewController的横向定位。

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    if ([self.window.rootViewController.presentedViewController isKindOfClass: [GameViewController class]]) {
        GameViewController *gameView = (GameViewController *) self.window.rootViewController.presentedViewController;
        if (gameView.isPresented) {
            return UIInterfaceOrientationMaskLandscape;
        } else {
            return UIInterfaceOrientationMaskPortrait;
        }
    }
    else return UIInterfaceOrientationMaskPortrait;
}
  

当应用转到后台时,我们要求解除GameViewController

- (void)applicationDidEnterBackground:(UIApplication *)application {
    if(self.window.rootViewController.presentedViewController) {
        UIViewController *presentedVC = self.window.rootViewController.presentedViewController;
        if([presentedVC isKindOfClass:[GameViewController class]]) {
            GameViewController *gameView = (GameViewController *)self.window.rootViewController.presentedViewController;
            gameView.isPresented = NO;
            [gameView.presentingViewController dismissViewControllerAnimated:NO completion:nil];
        }
    }
}

GameViewController.m

  

我们将这些设置为AppDelegate

- (void) awakeFromNib {
    self.isPresented = YES;
}

- (void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    self.isPresented = YES;
}

- (void) dismissView {
      self.isPresented = NO;
      [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}
  

在以下情况下按预期工作:

  • 打开应用
  • 打开MyViewController
  • 致电showGameView方法
  • 您将拥有GameViewController
  • 的横向广告
  • 即使您将手机更改为任何方向也无关紧要
  • GameViewController
  • 解雇
  • 将返回MyViewController
  • 的纵向方向
  • 一切都很好看
  

在以下情况下不按预期工作:

  • 打开应用
  • 打开MyViewController
  • 致电showGameView方法
  • 锁定手机
  • 将手机方向更改为横向
  • 解锁手机,返回应用
  • 您将拥有MyViewController
  • 的横向广告
  • GameViewController
  • 解雇
  • 一切看起来乱糟糟的
  

这是处理不同方向的应用设置:

enter image description here

0 个答案:

没有答案