我有三個ViewController設置爲處理三個視圖。我遇到的問題是在模擬器中的方向是LandscapeRight(這是我想要的),並且第一個視圖在該橫向視圖中正確顯示,但是當我轉到第二個和第三個視圖時,它們顯示出來將手機屏幕左下角的視圖左上角逆時針旋轉90度。我一直在試圖調試這幾天和我已經得到了一個線索最近正在跟蹤它通過以下方式:只有第一個UIView添加視圖addSubview顯示正確的方向
以下是我的應用程序委託的applicationDidFinishLaunching:
NSLog(@"1");
[window addSubview:welcomeController.view];
NSLog(@"2");
[window addSubview:goalController.view];
NSLog(@"3");
[window addSubview:planningController.view];
NSLog(@"4");
[window bringSubviewToFront:welcomeController.view];
NSLog(@"5");
我的每ViewControllers實現類似於下面的東西(傳遞給NSLog的字符串中是控制器的名字唯一的變化切換出):
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
NSLog(@"called for WelcomeController");
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
就這樣,我得到的控制檯輸出如下:
a
called for WelcomeController
called for WelcomeController
called for WelcomeController
called for WelcomeController
2
called for GoalController
3
called for PlanningController
4
5
我覺得有趣的是,shouldAutorotateToInterfaceOrientation被稱爲4次爲第一個視圖添加,而另外兩個只被調用一次。我期望這可能是因爲它首先要做一些設置(我相信模擬器是以縱向模式開始的,所以它可能會在旋轉時調用它),但我發現相關性有點可疑。
我已經切換了順序,因此首先爲goalController和welcomeController調用addSubview。在這種情況下,它是以正確的橫向方向顯示的goalController(通常是歡迎控制器)。這似乎消除了我的XIB文件和ViewControllers本身。我不知道爲什麼addSubview被調用的第一個視圖是特殊的。我也嘗試在索引0處使用insertSubview,結果相同。
這似乎沒有幫助我的代碼。我曾嘗試在相應的addSubview調用前後對goalController和planningController進行調用(我甚至嘗試切換300和480;)它似乎在某些點上有所不同,因爲在部分背景中使用了歡迎視圖屏幕沒有被覆蓋,它只是白色,所以我認爲它必須在屏幕上伸展。 – 2009-09-28 12:21:01
我從你的文章中注意到的一件事是,你似乎有一個以縱向模式顯示的桌面視圖,將右側的大約1/3頁面留空。我得到的是同樣的東西,除了我的視角旋轉了90度,所以應該是最上面的是向左。 – 2009-09-28 12:26:02
我用橫向設計設計了IB中的所有東西,這可能是爲什麼東西指向正確的方向,但不佔用整個屏幕。我開始使用mainWindow,viewControllers和views,都處於風景中。 像你一樣,如果我改變我的視圖控制器的順序,那麼以先到者爲準,不需要setFrame調用。 – mahboudz 2009-09-28 19:10:42