iPhone

2010-04-22 59 views
8

強制UIInterfaceOrientation更改我很想獲得一個iPhone應用程序,它只需要在導航控制器堆棧中的每次按下或彈出來改變方向。iPhone

基本上第一個視圖是肖像,第二個景觀是第三個肖像(是的,我知道這不是理想的,但這是設計,我必須實現它)。

我經歷過各種建議在這裏....
How do I detect a rotation on the iPhone without the device autorotating?
Force portrait orientation on pushing new view to UINavigationViewController
Is there a documented way to set the iPhone orientation?
但是,如果沒有完全成功。

設置爲3.1.2對我的閱讀鏈接鏈接的文章上面似乎表明,如果我的縱向視圖與推

 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return ((interfaceOrientation == UIInterfaceOrientationLandscapeRight)); 
} 
視圖,則然後該視圖應顯示旋轉爲橫向。會發生什麼,它會以「破碎」的人像形式出現,然後在設備轉動時正確旋轉。

如果我將控制器彈回到我的縱向視圖(其具有合適的shouldAutoRotate ...),那麼它仍然處於破損的橫向視圖中,直到設備返回縱向。

我也嘗試刪除所有shouldautorotate消息,而是通過轉換視圖強制旋轉。這種作品,我已經通過移動狀態欄(實際上隱藏在我的應用程序)[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight;中發現,鍵盤在需要時會以正確的方向顯示。

這種方法的問題是,當你沒有狀態欄時,狀態欄變換很奇怪,很醜 - 每次更改都會在頁面上出現陰影。

所以。我錯過了什麼。

1)我錯誤地認爲在3.1.2(或可能更早)shouldAutorotateToInterfaceOrientation應提供所需的方向,只需通過推動控制器?

2)是否有另一種讓鍵盤以正確的方向出現的方法。

3)是未公開的API調用的路要走(請無)

回答

4

你不應該使用[UIViewController shouldAutorotateToInterfaceOrientation:]觸發方向改變!;只有讓系統知道是否允許自動旋轉。您仍然應該更新它以指定允許的方向。

如果要在顯示特定視圖時更改方向,則應在針對強制特定方向的每個視圖控制器的[UIViewController viewWillAppear:]覆蓋方法中調用[UIApplication setStatusBarOrientation:animated:]。當視圖被壓入堆棧並被彈出時,這會導致更改。確保您在覆蓋方法中致電super

這也是改變狀態欄顯示方式的好地方,如果這是你正在做的事。

+0

我不確定是否有[UIApplication setStatusBarOreintation ....和[UIApplication sharedApplication] .statusBarOrientation之間的區別...我會測試,否則這就是我所做的,我受苦於狀態欄旋轉的陰影。在橫向視圖中,我使用變換最初在景觀中顯示視圖。如果我然後允許使用shouldAutorotateToInterfaceOrientation的橫向視圖,它不會再被轉向嗎?我如何覆蓋它? – Andiih 2010-04-22 17:47:48

+0

請注意,此方法現已在iOS 9中棄用。 – fullofsquirrels 2016-06-17 20:30:14