在iPad开发中,横竖屏的视图常常是不同的,例如侧边栏Dock,在横屏时用于屏幕较宽,可以展示足够多的内容,每个按钮都可以展示出标题;而竖屏时Dock应该比较窄,只显示图标不现实按钮标题。

iPad比较重要的知识是不同类型设备的宽高在以点为单位的图形坐标系下固定为768x1024,因此常常利用此值来判断横竖屏。

768、1024、横竖屏判断很常用,可以定义一个公共的常量文件来放这些内容。

【常量和宏的定义】

①在.m文件中,定义变量,加上const,注意指针(例如NSString*)使用的是常量,而不是常量指针。

// 屏幕竖屏时的宽度
const CGFloat HMScreenPW = 768;
// 屏幕横屏时的宽度
const CGFloat HMScreenLW = 1024;

对于指针量的定义:

NSString *const Title = @"Title";

②在.h文件中,使用extern声明上面的变量,利用宏判断横竖屏。

// 屏幕竖屏时的宽度
extern const CGFloat HMScreenPW;
// 屏幕横屏时的宽度
extern const CGFloat HMScreenLW;
#define Lanscape ([UIScreen mainScreen].bounds.size.width == HMScreenLW)
#define Portrait ([UIScreen mainScreen].bounds.size.width == HMScreenPW)

【适配的关键方法】

①屏幕旋转时会调用控制器的方法:

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

通过函数判断横竖屏:

UIInterfaceOrientationIsLandscape(toInterfaceOrientation)

常见用法:

注意在这个方法调用时屏幕旋转还未完成,在这里拿到的宽高将会是错误的(原来的)。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{// 调用此函数时还未完成旋转,当前高度是旧的if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) { // 横屏} else { // 竖屏}}

在iOS8中,上面的方法已经过期,更新为下面的方法:

注意实现了这个方法上面的方法就失效了,因此为了适配应该用上面的方法。

// 实现了下面的方法上面的过期方法就不会调用了,为了适配应该使用老方法。
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator{NSLog(@"%@",NSStringFromCGSize(size));}

②UIView在尺寸被修改后,会调用layoutSubviews方法,可以通过重写此方法, 先调用父类方法,然后实现自己的布局逻辑,从而实现Dock等的横竖屏变换。

- (void)layoutSubviews
{[super layoutSubviews];// 自己的布局逻辑
}

【复杂视图的切分】

对于一个复杂的视图,常常需要多次切分,然后分别处理,例如下面的视图的切分:

首先整个控制器视图被切分为ContentView和Dock两部分,Dock内部又进行了细分,在竖屏时,Dock应该变窄,下面的所有按钮都是竖着排列,并且不显示标题,如下图所示:

切分完毕后,处理适配就变得简单了。首先屏幕旋转会调用控制器的方法,控制器直接修改Dock尺寸,从而调用了Dock的layoutSubviews方法,Dock在此方法中又对HeadView、Tabbar、Toobar的尺寸进行了修改,又调用了它们各自的layoutSubviews方法,因为只需要在layoutSubviews中处理尺寸改变即可。

(一〇八)iPad开发之横竖屏适配相关推荐

  1. 移动Web开发实战-横竖屏适配

    概述 在我们平时的移动Web页面开发过程中,经常会遇到需要横竖屏处理的情况.一般情况下我会项目实际情况,比如页面一般打开的情景是横屏还是竖屏,项目是否需要增加横竖屏适配,页面结构是否复杂等. 情景一 ...

  2. 移动端Web开发如何处理横竖屏

    <!Doctype html> <html> <head> <meta charset="utf-8"> <meta id=& ...

  3. Android开发中横竖屏切换的问题以及系统提供的常用Activity

    Android开发中横竖屏切换的问题以及系统提供的常用Activity(总结) 2018年06月28日 16:18:45 北极熊的微笑 阅读数:72 横竖屏切换与状态保存的问题 前面也也说到了App横 ...

  4. Opencv 摄像头二次开发,横竖屏切换,前后摄像头切换,铺满全屏问题,一次解决(附源码)

    Android Opencv 4.2 摄像头二次开发之 横竖屏切换,前后摄像头切换,铺满全屏问题,相机无法启动问题,一次解决 问题1.横竖屏切换崩溃问题 描述: 主要是原生的Opencv demo中没 ...

  5. cocos2d-x游戏开发屏幕横竖屏切换

    android解决方案: 1.在游戏的主activity中编写一个静态方法(继承Cocos2dxActivity) public static void changedActivityOrientat ...

  6. ipad 横竖屏适配+多任务+分屏

    ipad经常要求可以支持横屏.分屏: 首先配置项目环境 1.支持横竖屏 2.plist添加配置 3.launch Screen File 必须有值 4. UI 使用自动布局 转载于:https://w ...

  7. IPHONE/IPAD开发模拟器截屏

    MAC下有Shift+Command+3/4,可以全屏幕与区域截屏,但是在做iPhone/iPad软件提交的时候,要规定大小,截得很麻烦. 找到一个很方便的快捷方式: Control+Command+ ...

  8. iOS开发~WKWebView白屏适配

    WKWebView虽好,但白屏问题也很苦恼,下面分享一下自己解决问题的过程. 公司项目使用Cordova框架,做原生项目嵌入H5,业务复杂了以后,H5资源也越来越大,占用内存越来越多,加载也越来越慢, ...

  9. H5横竖屏适配代码,强制横屏

    1.强制横屏代码,检测用户屏幕方向,竖屏时提示用户将屏幕翻转 <style>@media all and (orientation: portrait) {html, body {posi ...

最新文章

  1. Xamarin XAML语言教程隐藏文件使用Progress属性设置进度条
  2. 上证50ETF申赎清单
  3. 想读读PyTorch底层代码?这份内核机制简介送给你
  4. 【Linux】GCC程序开发工具(上)
  5. nc 模拟服务器_NC集群服务器使用详解
  6. 递归实现进制转换(C++版)
  7. runtime无法执行grep_Caffe和py-faster-rcnn日常使用备忘录
  8. Ubuntu gedit中文乱码-转
  9. 计算机硬件知识大赛,计算机知识技能大赛.doc
  10. 对PV操作问题的理解综合
  11. SVM --从“原理”到实现
  12. 千脑——您的在线电脑
  13. VS2010旗舰版安装图解
  14. 计算机考研专业课408什么意思,考研408是什么意思
  15. RedisDesktopManager2022(resp-2022.0)安装失败的解决
  16. 网络直播电视之寻找直播地址(下)
  17. mac下安装pyinstaller
  18. 读书笔记之鳗鱼的旅行
  19. python狗狗年龄换算程序_狗狗年龄VS人类年龄(换算/对照表)
  20. 因为 BitMap,白白搭进去 8 台服务器。。。

热门文章

  1. 乘法——(大数乘小数)
  2. 如何查看RGB888格式的数据文件
  3. 笔记-知识产权与标准化知识-中华人民共和国招标投标法
  4. 软件开发如何打开ps中的主体工具
  5. GitHub个人仓库的创建以及新建文件和上传文件
  6. 自己本地搭建svn仓库_搭建svn仓库
  7. java毕业设计的婚庆策划系统的设计与实现mybatis+源码+调试部署+系统+数据库+lw
  8. Matlab安装SPAMS工具包 配置环境
  9. python-pandas学习笔记
  10. 蓝桥杯2012省赛 简单题解 c++