[英]UIWindow rootviewcontroller - wrong orientation
我正在開發一個iPad應用程序,如果用戶輸入密碼,該用戶只能(在某些情況下)打開該應用程序。 因此,我需要類似LoginViewController的東西。 但是首先,讓我們處理常見的情況,即應用程序只需要顯示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文件(左橫向)中設置了應用程序方向。 我確實在Home和LoginViewController中都使用UIInterfaceOrientationIsLandscape(...)實現了shouldAutorotate。
提前致謝!
糟糕,問題在於,我試圖在調用viewDidAppear之前以模態方式推送視圖控制器->絕對不要這樣做...
由於此錯誤更改我的代碼后,它就像一個魅力
我認為正在發生的事情是首選的方向是在初始根控制器上設置的-當您將其切換出時,它不會被設置。
我建議您考慮始終使HomeViewController成為根控制器。 而不是切換根控制器,請按下LoginViewController(如果希望它立即顯示,則不顯示動畫):
[self.navigationController pushViewController:controllerLoginBG animated:NO]
這樣,您將可以執行注銷和彈出HomeViewController之類的操作。 它還將使您的視圖控制器導航保持一致。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.