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抽成协议,只要遵守协议,就拥有了该方法的声明,自行实现协议方法.

  优点:iOS7\8都可行

  缺点:比较繁琐

2. 补充说明

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

  

posted @ 2015-03-06 20:02  oumygade  阅读(1948)  评论(0编辑  收藏  举报