zoukankan      html  css  js  c++  java
  • 项目仅支持竖屏,特定页面支持横屏(二)

         方法很简单:
         第一步:监听屏幕是否翻转的通知
          [[NSNotificationCenterdefaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil];
       第二步:写监听后调用的方法(主要目的就是隐藏状态栏和导航栏)
          - (void)deviceOrientationDidChange:(NSNotification *)notif {
        UIDeviceOrientation orientation = [UIDevicecurrentDevice].orientation;
        BOOL isPortrait = orientation == UIDeviceOrientationPortrait;
        [self.navigationControllersetNavigationBarHidden:!isPortrait animated:YES];
        [[UIApplicationsharedApplication] setStatusBarHidden:!isPortrait withAnimation:UIStatusBarAnimationFade];
    }
        第三步:在将要出现的页面和将要消失的页面写清是否允许旋转,消失的时候把监听移除
         - (void)viewDidAppear:(BOOL)animated {
        [superviewDidAppear:animated];
        AppDelegate *appdelegate = [UIApplicationsharedApplication].delegate;
        appdelegate.allowMaskAllOrientations = YES;
    }

    - (void)viewWillDisappear:(BOOL)animated {
        [superviewWillDisappear:animated];
        AppDelegate *appdelegate = [UIApplicationsharedApplication].delegate;
        appdelegate.allowMaskAllOrientations = NO;
        [[NSNotificationCenterdefaultCenter] removeObserver:self
                                                        name:UIDeviceOrientationDidChangeNotification
                                                      object:nil];
    }
         第四步:在AppDelegate.h中补上上边的那个判断横竖屏的布尔值属性
          @property (assign, nonatomic) BOOL allowMaskAllOrientations;    // 是否允许旋转
              第五步:在AppDelegate.m中写上屏幕旋转控制的方法(6.0以后才有的方法,现在都用8.0了)
          - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
        returnself.allowMaskAllOrientations ? UIInterfaceOrientationMaskAll : UIInterfaceOrientationMaskPortrait;
    }
       完成。
       很快吧,好像对其他控制器没有过特殊设置,而且不用实例化个导航控制器,节省了太多空间了。
         上一种方法是我结合多种外援的产品,比较麻烦,要将每一个控制器都写上两个方法,是否支持方向旋转和支持哪种旋转方向。不过我一直在考虑,可能写一个控制器的类,这个类里边写清不支持横屏的两个方法,然后让每个控制器都去继承这个控制器,在此基础上再写其他的方法实现。但是我并没有实际验证。而支持横屏的页面就正常去创建控制器,然后在控制器中写好那两个方法。
         期初,上一种方法是有问题的,但是最近又没有复现问题,源于记忆,好像是状态栏会自由的横竖切换,主要是在不支持横屏的页面,我并没有找到原因,也不知道是怎么才可固定在顶部。不过这个问题真的不再复现了,我做了几次尝试都没有了。
         今天这种是有问题的,一个是横屏后,点击屏幕没有变化了,导航栏由于人工的隐藏,仅可再次竖屏后,才能返回上一页。另一个,如果人为的不去把导航栏隐藏掉的话,导航栏会有问题,又美观具体我就不复现了。
         那么第二种是简单的,工程中不用勾选向左横屏和向右横屏,每个控制器也都不用再设置那两个方法了,仅在播放的控制器中写就可以了。
         我也将第一种方法的实现连接附上:http://www.cnblogs.com/guoqiangx-5/p/5501008.html
     本文原创,转载请附原文链接,谢谢。
  • 相关阅读:
    LintCode Python 简单级题目 488.快乐数
    LintCode Python 简单级题目 100.删除排序数组中的重复数字 101.删除排序数组中的重复数字II
    LintCode Python 简单级题目 373.奇偶分割数组
    LintCode Python 简单级题目 39.恢复旋转排序数组
    LintCode Python 简单级题目 35.翻转链表
    LintCode Python 简单级题目 451.两两交换链表中的节点
    LintCode Python 简单级题目 174.删除链表中倒数第n个节点
    aws查看官方centos镜像imageid
    linux shell脚本查找重复行/查找非重复行/去除重复行/重复行统计
    php配置优化-生产环境应用版
  • 原文地址:https://www.cnblogs.com/guoqiangx-5/p/5685076.html
Copyright © 2011-2022 走看看