项目仅支持竖屏,特定页面支持横屏(二)

     方法很简单:
     第一步:监听屏幕是否翻转的通知
      [[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
 本文原创,转载请附原文链接,谢谢。
原文地址:https://www.cnblogs.com/guoqiangx-5/p/5685076.html