zoukankan      html  css  js  c++  java
  • 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布局依然会乱)

  • 相关阅读:
    android gridview布局,实现长按某一个,所有项都显示删除的图标
    Error:Execution failed for task ':app:transformClassesWithDexForDebug&#
    FragmentActivity和Activity的具体区别在哪里
    android批量文件上传(android批量图片上传)
    Android studio修改debug.keystore
    2 weekend110的SecureCRTPortable远程连接 + 上传安装jdk + 上传安装配置hadoop
    1 weekend110的Linux带图形系统安装 + 网络配置 + 静态IP设置
    weekend110(Hadoop)的 第一天笔记
    详细讲解Hadoop源码阅读工程(以hadoop-2.6.0-src.tar.gz和hadoop-2.6.0-cdh5.4.5-src.tar.gz为代表)
    如何自己编译生成hadoop的eclipse插件,如hadoop-eclipse-plugin-2.6.0.jar
  • 原文地址:https://www.cnblogs.com/jiang-xiao-yan/p/5959620.html
Copyright © 2011-2022 走看看