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
     本文原创,转载请附原文链接,谢谢。
  • 相关阅读:
    洛谷 P1525 关押罪犯(并查集|二分图判定&二分答案)
    洛谷 P1948 [USACO08JAN]Telephone Lines S(贪心+最短路)
    洛谷 P1315 观光公交(贪心+模拟)
    洛谷 P3258 [JLOI2014]松鼠的新家(树上差分)
    【NOIP2001】统计单词个数
    【洛谷习题】皇后游戏
    【洛谷习题】木棍加工
    【SDOI2008】仪仗队
    【洛谷习题】末日的传说
    【洛谷习题】又是毕业季I
  • 原文地址:https://www.cnblogs.com/guoqiangx-5/p/5685076.html
Copyright © 2011-2022 走看看