在iOS开发的过程中,有时候会遇到固定的一个界面需要能随意切换横竖屏,而且其他的界面都不可以切换的时候。就必须在工程文件中如下图,
这个时候的整个项目就都是处于可以横竖屏切换的状态。所以此时,你必须通过在AppDelegate.m文件中用代码来控制界面的横切屏切换。
- (UIInterfaceOrientationMask)application:(UIApplication)application supportedInterfaceOrientationsForWindow:(UIWindow)window {
if(_isLandscape) {
//判断当前的界面横竖屏状态
UIDeviceOrientation orientation = [UIDevicecurrentDevice].orientation;
if(orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight){
return UIInterfaceOrientationMaskLandscape;
}else{//横屏后旋转屏幕变为竖屏
return UIInterfaceOrientationMaskPortrait;
}
}else{
return UIInterfaceOrientationMaskPortrait;
}
}
UIDeviceOrientation 是机器硬件的当前旋转方向 这个你只能取值 不能设置
这个时候,你就可以通过设置 _isLandscape的值来控制界面是否能进行横竖屏的切换。
typedef NS_ENUM(NSInteger, UIDeviceOrientation) {
UIDeviceOrientationUnknown, //系統無法判斷目前Device的方向,有可能是斜置
UIDeviceOrientationPortrait, // 设备垂直方向上,按钮在底部
UIDeviceOrientationPortraitUpsideDown, // 设备垂直方向上,按钮在顶部
UIDeviceOrientationLandscapeLeft, // 设备水平方向,按钮在右边
UIDeviceOrientationLandscapeRight, // 设备水平方向,按钮在左边
UIDeviceOrientationFaceUp, // 面向设备的扁平化,屏幕向上
UIDeviceOrientationFaceDown // 面向设备的扁平化,屏幕向下
} __TVOS_PROHIBITED;
在ViewController里面,你可以通过获取AppDelegate里面的_isLandscape值来控制屏幕能否横竖屏切换
- (void)backToPortrait : (BOOL)isLan{//回到竖屏
AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
appDelegate.isLandscape = isLan;
}
初次写博客,可能表述上有些不清晰,需要的话可以留言,大家多讨论。谢谢。