iOS强制横屏

前两天遇到了一个 “使用指定的不同屏幕方向打开新页面” 的需求,需求很简单:APP 一直保持竖屏,要求新打开的签名页面能够指定为横屏或竖屏,并自动的转换,且不允许自动切换,新页面退出后要恢复竖屏!

在网上查了很多资料均不能获取自己想要的效果,最后整理了别人的思路,方法,再花了一天的工作量填坑,成功实现了想要的功能和效果,嗯,完美!!!!

公司的 APP 采用的通用方案:根控制器为 TabBarController,之后嵌套 NavigationController,然后放入 ViewController 页面进行展示,需要横屏的页面控制器建议需要用 present 方式进行弹出(原因就是坑少啰!!!!)。

废话太多直接进入正题!!!!!!!!

第一步:

 在AppDelegate.m中的- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window中添加以下代码

    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

    BOOL isAllowLandscape = [userDefault boolForKey:@"userDefault_isAllowLandscape"];

    [userDefault setBool:NO forKey:@"userDefault_isAllowLandscape"];

//这里其实可以再加一个判断,具体到需要强制横评的页面  

  if (isAllowLandscape) {

        return UIInterfaceOrientationMaskLandscapeRight;

    }

    else

    {

        return (UIInterfaceOrientationMaskPortrait);

    }

其中采用单例模式进行横竖屏标志tag设置

ps:之前查了很多资料,最有效的方法中都在要求在target ->general ->Deployment info -> Device Orientation中勾选Landscape Left 或者****Right,我也试着这么弄了,但是这个有个大坑,他们也没提出自己的解决方案!弄了我半天,毕竟这个设置后整个app都可以进行横竖屏,设置横竖屏标志来强制某些界面可以横评或者竖屏这个方法也用了,某些情况还是会出现bug,总之就一句话:就是有坑。

第二部:

a.直接在需要强制横屏的控制器的ViewDidLoad方法中添加修改单例状态代码

    NSLog(@"TradeSignatureViewController:viewDidLoad");

    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

    [userDefault setBool:YES forKey:@"userDefault_isAllowLandscape"];

b.在viewWillDisAppear中恢复单例状态为竖屏标志,就是为了推出界面后强制回竖屏

- (void)viewWillDisappear:(BOOL)animated {

    [super viewWillDisappear:animated];

    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

    [userDefault setBool:NO forKey:@"userDefault_isAllowLandscape"];

}

c.

在提取签名的方法中添加如下代码

    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

    [userDefault setBool:NO forKey:@"userDefault_isAllowLandscape"];    //图片获取到后恢复竖屏,否则会出现返回页面也是横屏的情况

 最后的重点: 因为签名界面仅仅允许横屏,因此在进行xib (没有用xib当我没说),因此xib的属性选择Landscape然后进行横屏布局(为了不埋坑,在同一个文件中弹出框最好也做一个横屏的弹出框,这样就需要对全局的弹出框再进行一次横屏切换)


 总结:看了好多解决方案,填了好多坑,最后压缩成就这点代码,两天的工作量,真是日了狗!



你可能感兴趣的:(移动开发技术)