• iOS iPad开发之横竖屏适配


    1. 做横竖屏适配的时,需要判断当前状态是横屏还是竖屏,有两种方法:

      第1种:[UIScreen mainScreen].bounds.size.width == 768

        优点:把这个抽成宏之后,随时可以判断横竖屏, #define Lanscape ([UIScreen mainScreen].bounds.size.width == 768)

        缺点:只在iOS8可行,也就是说在iOS8中横屏的width=1024,竖屏的width=768; 而在iOS7上,横竖屏的width=768

      第2种: - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

        屏幕旋转时,会自动调用该方法,只需要在根控制器重写该方法

          - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

          {

                  BOOL landscape = UIInterfaceOrientationIsLandscape(toInterfaceOrientation); //判断是不是横屏

                  [子视图1 rotate:landscape];  // 子视图1的公共方法

              [子视图2 rotate:landscape];  // 子视图2的公共方法

          }

        在子视图1中,要实现- (void)rotate:(BOOL)landscape 方法

          - (void)rotate:(BOOL)landscape

          {

                if (landscape) {

                      // 横屏情况下,frame是怎样的

                } else {

                      // 竖屏情况下,frame是怎样的

                }

                // 如果子视图1里,如果也有子视图,可以这样

                [子视图1的子视图A rotate:landscape];

                [子视图1的子视图B rotate:landscape];

          }

      实际可能有很多视图都需要响应横竖屏,所以可以- (void)rotate:(BOOL)landscape抽成协议,只要遵守协议,就拥有了该方法的声明,自行实现协议方法.

      优点:iOS78都可行

      缺点:比较繁琐

    2. 补充说明

      屏幕旋转时,窗口会知道,窗口然后告诉根控制器,然后根控制器传给子控制器,子控制器又传给子控制器,所以控制器的view要响应屏幕旋转事件,通过找父控制器,一层层往上找,最终要能找到窗口才行.

      

  • 相关阅读:
    unity 判断是安卓还是IOS平台
    C# set get 函数 属性访问器
    C# 字典 Dictionary
    掌握下面常用函数,学PHP不再难!
    阿里云云虚拟主机上个人网站的Https访问配置
    PHP中$_SERVER 参数详解,PHP判断当前访问的http还是https
    个人网站如何选择支付接口(API回调)
    备战NOIP——模板复习8
    备战NOIP——模板复习7
    备战NOIP——模板复习7
  • 原文地址:https://www.cnblogs.com/oumygade/p/4319133.html
Copyright © 2020-2023  润新知