UIWindow rootviewcontroller - 方向错误

时间:2012-10-08 12:37:03

标签: ios ipad uiviewcontroller uiwindow

我正在开发一个iPad应用程序,如果用户输入密码,用户就可以(在某些情况下)打开应用程序。 因此我需要像LoginViewController这样的东西。但首先,让我们来处理常见的情况,即app只需要显示HomeViewController:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{  
    //...
    self.controllerHomeView = [[HomeViewController alloc] initWithNibName:@"HomeView" bundle:nil];
    self.controllerHomeView.showInitialGuide = isFirstLaunch;
    self.window.rootViewController = controllerHomeView;
    [self.window makeKeyAndVisible];
    //..
}

但是,正如我之前所说,有些用户可能已经定义了密码,如果是,我们需要显示登录屏幕。这就是我为实现这样一个功能所做的工作:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    //---
    if(isAppPinSecured && !loginIsAlreadyDisplaying) {
        LoginBackgroundViewController *controllerLoginBG = [[LoginBackgroundViewController alloc] initWithNibName:@"LoginBackgroundView" bundle:nil];
        self.appPinInputBG = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default-Landscape@2x~ipad.png"]];
        self.appPinInputBG.frame = CGRectMake(0, 0, 1024, 748);
        self.appPinInputBG.userInteractionEnabled = YES;
        [controllerLoginBG.view addSubview:self.appPinInputBG];
        //present new root = background
        self.window.rootViewController = controllerLoginBG;
        //...
    }
}

我正在做的是,将根视图控制器更改为LoginViewController,如果用户输入正确的密码,则从 LoginViewController 更改回 HomeViewController

到目前为止一切正常,除了方向。如果当前界面方向未知,则因为iPad例如放在桌子上, LoginViewController 方向是 LandscapeRight ,而不是 HomeViewController LandscapeLeft )中的方向。 如果将iPad拿在手中,它可以正常工作,但其他情况下则不然。

有关如何解决该问题的任何建议?我确实在plist文件中设置了我的app方向(Landscape Left)。我在两个方面实现了shouldAutorotate和UIInterfaceOrientationIsLandscape(...) - Home-和LoginViewController。

提前致谢!

2 个答案:

答案 0 :(得分:1)

Argh,问题是,我试图在调用viewDidAppear之前模态推送视图控制器 - >你永远不应该这样做......

由于此错误而更改了我的代码后,它就像魅力一样

答案 1 :(得分:0)

我认为发生的事情是首选方向是在初始根控制器上设置的 - 当你将其切换出来时,它不会被设置。

我建议您考虑始终将HomeViewController作为根控制器。而不是切换根控制器,推送LoginViewController(如果你想立即显示它,没有动画):

 [self.navigationController pushViewController:controllerLoginBG animated:NO]

通过这种方式,您可以执行注销和弹出到HomeViewController等操作。它还可以使视图控制器导航保持一致。