• iOS 旋屏问题


      今天突然想起来,以前的一个问题没有解决,就上网百度了一些方法,看到一篇文章,写的很详细,我就操作试试,结果还真的实现了功能,接下来我将重复他的结合我自己的测试,说一下iOS中的旋屏问题。

      1、首先配置工程 使其支持屏幕旋转

                

      2、如果你的rootViewController为UITabBarController的情况下 建议创建一个UITabBarController的公共父类 在里面实现如下代理方法

      preferredInterfaceOrientationForPresentation 我理解为打开时当前界面的朝向

      shouldAutorotate 是否支持旋转

      supportedInterfaceOrientations 所支持的旋转方向

      return返回的为当前选中 tabar 的item的情况

      具体的代码如下:

    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {

        return [self.selectedViewController preferredInterfaceOrientationForPresentation];

    }

    - (BOOL)shouldAutorotate {

        return YES;

    }

    - (UIInterfaceOrientationMask)supportedInterfaceOrientations {

        return [self.selectedViewController supportedInterfaceOrientations];

    }

      3、在 UITabBarController 中放UINavigationController后 还需要在 UINavigationController中实现还是那三个方法  因为我的界面只有VideoDetail1ViewController需要横竖屏的处理 所以我只是单独的做了判断

    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {

        if ([self.topViewController isKindOfClass:[VideoDetail1ViewController class]]) {

            return UIInterfaceOrientationPortraitUpsideDown;

        }

        return UIInterfaceOrientationPortrait;

    }

    - (BOOL)shouldAutorotate {

        if ([self.topViewController isKindOfClass:[VideoDetail1ViewController class]]) {

            return YES;

        }

        return NO;

    }

    - (UIInterfaceOrientationMask)supportedInterfaceOrientations {

        if ([self.topViewController isKindOfClass:[VideoDetail1ViewController class]]) {

            return UIInterfaceOrientationMaskAllButUpsideDown;

        }

        return UIInterfaceOrientationMaskPortrait;

    }

      如果不需要特定的对某个界面做旋屏的还,可以直接进行如下操作:

    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {

        return  [self.topViewController preferredInterfaceOrientationForPresentation];

    }

    - (BOOL)shouldAutorotate {

       return   [self.topViewController shouldAutorotate];

    }

    - (UIInterfaceOrientationMask)supportedInterfaceOrientations {

        return  [self.topViewController supportedInterfaceOrientations];

    }

      4、然后如果某个界面想支持屏幕旋转 只需要在里面重写写方法即可

    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {

        return UIInterfaceOrientationPortrait;

    }

    - (BOOL)shouldAutorotate {

        return YES;

    }

    - (UIInterfaceOrientationMask)supportedInterfaceOrientations {

        return UIInterfaceOrientationMaskAllButUpsideDown;

    }

      5、 运行就可以达到想要的结果

      (总结下来为 APP 中 UITabBarController中的支持旋转由 UITabBarController 下的 UINavigationController 控制 而UINavigationController的旋转由你自己在当前Controller中设置的值来控制),如果rootViewController不是UITabBarController的话 同理... 

    附: 在手机为横屏模式下打开APP  APP会按照横屏来布局 需要在 如下方法中新加

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{  

        [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];//此方法    ....

    }

    这样就会解决横屏模式下打开 APP 产生的一些问题

    (容易出现的一些问题为:当你在didFinishLaunchingWithOptions中 加载了另一个 window 的时候需要在自己建的 window 中也遵守屏幕旋转的几个代理方法 不然横屏模式下打开APP布局依然会乱)

  • 相关阅读:
    【动画】看动画轻松理解「Trie树」
    浅析HTTP/2的多路复用
    HTTPS 详解
    PHP写时复制(Copy On Write)
    golang 几种字符串的拼接方式
    正排索引和倒排索引简单介绍
    传值还是传引用
    lvs与nginx区别
    Docker运行操作系统环境(BusyBox&Alpine&Debian/Ubuntu&CentOS/Fedora)
    原创-thanos组件(聚合多个prometheus组件)原理介绍
  • 原文地址:https://www.cnblogs.com/jiang-xiao-yan/p/5959620.html
Copyright © 2020-2023  润新知