首先,在iOS中展示界面的方式有两种,push和modal
那么,在app中如果想要实现随心所欲的屏幕旋转,就要分两种情况来看
1,使用push,也就是说我们的控制器要嵌套在一个UINavigationController下来展示,我们需要以个继承了UINavigationController的子类来重写一下三个方法
- (BOOL)shouldAutorotate{
return self.topViewController.shouldAutorotate;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
return self.topViewController.supportedInterfaceOrientations;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
return self.topViewController.preferredInterfaceOrientationForPresentation;
}
然后在相应的控制器里也要重写着三个方法,例如这样
- (BOOL)shouldAutorotate{
return self.autoRotate;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
return self.mask;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
return self.orientation;
}
这里重写的目的是为了真正控制当前的屏幕方向
重写这三个方法也是做一个铺垫,真正发挥改变屏幕方向的代码是
[[UIDevice currentDevice] setValue:@(UIDeviceOrientationLandscapeLeft) forKey:@"orientation"];
只有重写了前面的三个方法,上面的代码才会起作用
以上的步骤的确可以实现屏幕旋转,但是无论是modal还是push 我都发现还存在问题,modal 的情况下会偶发控制器的view 旋转了但是屏幕的方向没有变,push 的问题发生打概率更大一些,就是当从A到B变横屏,然后从B到C变竖屏,再从C返回B能够变回横屏,然后从B返回A也能变回竖屏,这时候再从Apush到B则不能变横屏,这是目前遇到的问题,记录下来,暂时留在这里,明天继续解决。
网友评论