比方說,我有一個視圖控制器,稱之爲ViewControllerPortrait,它被設計爲只能在肖像模式下顯示。例如: -如何在設備旋轉過程中「鎖定」視圖的方向
當用戶旋轉設備的風景,我不想ViewControllerPortrait永遠重新定位自己的風景,但我想提出一個新的全屏視圖。我們稱之爲全屏視圖控制器ViewControllerLandscapeFull。例如:
我再也不想看到的是這樣的:
我試圖做到這一點的方法是讓窗口的RootViewController的存在ViewControllerLandscapeFull在當屏幕全屏時willRotateToInterfaceOrientation:duration:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
[navigationViewController setNavigationBarHidden:YES animated:YES];
self.viewControllerPortrait = [[ViewControllerPortrait alloc] init];
self.viewControllerPortrait.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:self.viewControllerPortrait animated:NO completion:NULL];
然後在ViewControllerLandscapeFull我:
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape | UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return (UIInterfaceOrientation)[UIDevice currentDevice].orientation;
}
這工作得相當好。由於ViewControllerLandscapeFull「更喜歡」風景,並具有UIModalPresentationFullScreen
modalPresentationStyle
,它只能在風景中顯示。通過爲supportedInterfaceOrientations返回landscape | portrait
,設備旋轉回肖像被允許發生ViewControllerLandscapeFull得到willRotateToInterfaceOrientation:duration:
並最終調用dismissViewControllerAnimated:NO
。
我唯一的問題是,在旋轉回肖像期間,您可以暫時看到橫向的ViewControllerPortrait,這就是我想要避免的。
ViewControllerPortrait確實實現:
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
而且我驗證過的UIKit是調用它,但它似乎沒有任何效果。 (該文檔說,supportedInterfaceOrientations
只在根視圖控制器和視圖控制器呈現全屏,所以我實際上很驚訝UIKit稱之爲。)
FWIW,我正在與iOS 8 beta 5 SDK並建設7/8。
Muchas gracias。
你有螞蟻tabbar或導航欄在你的應用程序?我的意思是你不想旋轉的視圖控制器在任何tabbar或navigationcontroller內? – Rashad 2014-08-28 06:45:20
是的,我所稱的ViewControllerPortrait是UINavigationController(實際上是一個子類)的一部分。 – 2014-08-28 19:40:05