首先昂勉,在iOS中展示界面的方式有兩種,push和modal
那么宪睹,在app中如果想要實(shí)現(xiàn)隨心所欲的屏幕旋轉(zhuǎn)愁茁,就要分兩種情況來看
1,使用push,也就是說我們的控制器要嵌套在一個(gè)UINavigationController下來展示亭病,我們需要以個(gè)繼承了UINavigationController的子類來重寫一下三個(gè)方法
- (BOOL)shouldAutorotate{
return self.topViewController.shouldAutorotate;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
return self.topViewController.supportedInterfaceOrientations;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
return self.topViewController.preferredInterfaceOrientationForPresentation;
}
然后在相應(yīng)的控制器里也要重寫著三個(gè)方法鹅很,例如這樣
- (BOOL)shouldAutorotate{
return self.autoRotate;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
return self.mask;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
return self.orientation;
}
這里重寫的目的是為了真正控制當(dāng)前的屏幕方向
重寫這三個(gè)方法也是做一個(gè)鋪墊,真正發(fā)揮改變屏幕方向的代碼是
[[UIDevice currentDevice] setValue:@(UIDeviceOrientationLandscapeLeft) forKey:@"orientation"];
只有重寫了前面的三個(gè)方法罪帖,上面的代碼才會(huì)起作用
以上的步驟的確可以實(shí)現(xiàn)屏幕旋轉(zhuǎn)促煮,但是無論是modal還是push 我都發(fā)現(xiàn)還存在問題,modal 的情況下會(huì)偶發(fā)控制器的view 旋轉(zhuǎn)了但是屏幕的方向沒有變整袁,push 的問題發(fā)生打概率更大一些菠齿,就是當(dāng)從A到B變橫屏,然后從B到C變豎屏坐昙,再從C返回B能夠變回橫屏绳匀,然后從B返回A也能變回豎屏,這時(shí)候再從Apush到B則不能變橫屏,這是目前遇到的問題襟士,記錄下來盗飒,暫時(shí)留在這里,明天繼續(xù)解決陋桂。