iOS 9 学习系列:Split Screen Multitasking
http://www.cocoachina.com/ios/20151010/13601.html
iOS 9 的一个重大变化就是增加了多任务,这个多任务允许用户在屏幕上同时运行多个 app。有两种形态,Slide Over(滑动覆盖视图) 和 Splite View(分割视图)。
Slide Over View

这种形式下,用户可以从右侧划出一个窄的区域,在这个区域里展示了应用的列表,然后你可以选择打开一个,在这个区域里展示。它出现在你前面运行的程序之上,并且两个应用之间不会有任何相互操作和影响。
Split View

为了打开 splite view,用户要把(两个应用之间的)分割线拖到左边。用户自己来控制被垂直分隔开的2个应用的窗口大小。当 splite view 为当前状态时,没有前后台的概念,两个应用都是在前台的。
目前,splite view 仅适用于 iPad Air 2。
Enabling Multitasking in Your App
当你创建新项目时,多任务设置是默认开启的。如果要为一个老项目开启这个功能,则需要手动设置一下。下面是你在使用 iOS 9 SDK 的情况下,需要做的:
1. 允许全部的方向(Portrait, Upside Down, Landscape Left, Landscape Right)
2. 使用 Storyboards
设置(Opting Out)
当你具备了上面两个条件后,多任务才能在你使用iOS 9 SDK 编译时,被允许使用。如果想要编辑这个属性,在 info.plist 中指明 UIRequiredFullscreen这个 key 的值。
Auto Layout 的重要性
Auto Layout 在 iOS 6中首次被引入,它允许你通过设置约束而不是位置信息来控制UI的布局。 Adaptive Layout 是在 iOS 8中被引入,它把 Auto Layout 的能力提升了一个级别,允许你为不同尺寸的设备设置不同的约束。Size classes 可以根据 app 窗口的大小,确定一个相对的位置。
由于要多任务,你仍然可能有很多问题,需要在 iOS 9 上进行调解。
不要再使用 UIInterfaceOrientation 了
理论上,UIInterfaceOrientation 在多任务的情况下不在起作用。如果你想为一个在多任务中的app 确定他的 UIInterfaceOrientation, 你无法确认是否是在全屏状态下。比如说,你的应用在前台并且是横向的,尽管比纵向的会宽,但是(代码)仍然会给你返回为 UIInterfaceOrientationPortrait。
但有时候我们仍然需要根据方向来调整一下用户界面,怎么办呢?答案是,使用traitCollection.horizontalSizeClass。 他会给你 Size Class 的信息,你可以根据方向来调整应用中view 的布局。
尺寸变化事件
以前当旋转事件发生时,我们推荐使用 willRotateToInterfaceOrientation 和 didRotateToInterfaceOrientation方法,来响应。 在 iOS 8 里苹果介绍了 willTransitionToTraitCollection 和 viewWillTransitionToSize 两个方法。这些方法在 iOS 9里,对于多任务仍然有效,并且更重要了。你可以根据需求,来检测方向和手动比较宽高等。
键盘响应事件
以前,只有当你打开应用时,键盘事件才有效。现在,有可能仅仅是最上层的应用需要键盘,他就出现了。

某些情况下,出现键盘可能对你的应用并无影响。但有时,可能键盘会挡住你的应用的一块儿重要位置,这时 UIKeyboard 的通知就很重要了。 WillShow, DidShow, WillHide, DidHide, WillChangeFrame 和 DidChangeFrame 这些通知让你有能力处理此类问题。这些通知事件,在屏幕上出现的两个应用中都能接受到。
其他考虑因素
(多任务带来的)这些变化,让你必须要考虑的,并非仅仅是视觉改变。以前只有一个应用运行在前台,你可以使用大量的 CPU,GPU 和内存资源。但现在不同了,假如一个用户选择了 split view 或者 slide over view ,于此同时,他还利用 iOS9 的画中画的特性,观看一个视频,就是三个应用来分享这些资源了
为了更好的用户体验,系统会管理资源的占用,并且会终止掉占用资源过多的 app。--- 来自苹果 iOS9 多任务开发文档。
你需要对你的应用在不同情况下,进行更多测试来却确保有信心达到预期的效果,并确保没有占用多余的资源。
延伸阅读
想要了解更多关于 iOS9 多任务的内容,请阅读开发者中心的文档 Adopting Multitasking On iPad。我同样推荐,观看WWDC 2015 的session 410 Continuous Integration and Code Coverage in Xcode。
iOS 9 学习系列:Split Screen Multitasking的更多相关文章
- iOS/iPhone学习系列、代码教程
part 1--入门: 1. xcode 版本下载 以及 iphone sdk 下载: 最新版本在此下载: http://developer.apple.com/devcenter/ios/index ...
- iOS 9学习系列:打通 iOS 9 的通用链接(Universal Links)
在WWDC 2015 上, Apple 为 iOS 9 宣布了一个所谓 通用链接 的深层链接特性, 视频地址为 [无缝链接到您的 App].虽然它不是一个必须实现的功能, 但还是需要引起一些注意. 在 ...
- iOS 9 学习系列: Xcode Code Coverage
Code coverage 是一个计算你的单元測试覆盖率的工具. 高水平的覆盖给你的单元測试带来信心.也表明你的应用被彻底的測试过了. 你可能写了几千个单元測试,但假设覆盖率不高.那么你写的这套測试可 ...
- iOS 9 学习系列:UIStack View
http://www.cocoachina.com/ios/20150921/13492.html 在 iOS9 中,Apple 引入了 UIStackView,他让你的应用可以通过简单的方式,纵向或 ...
- iOS 9 学习系列:Storyboard References
http://www.cocoachina.com/ios/20150922/13474.html 如果你曾经使用 interface builder 创建过一个复杂.界面非常多的应用,你就会明白最后 ...
- iOS 9 学习系列:UIStack View (转载)
作者:Nathan_Bao 地址:http://www.jianshu.com/p/1991e6c2881a 在 iOS9 中,Apple 引入了 UIStackView,他让你的应用可以通过简单的方 ...
- iOS学习系列 - 扩展机制category与associative
iOS学习系列 - 扩展机制category与associative category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方 ...
- 开篇:软件项目的整个流程 - IT软件人员学习系列文章
这段时间闲来无事,就在总结以前的项目经验,然后写成博客的形式以进行记录.本文就对<IT软件人员学习系列文章>做个开篇吧. 对于IT软件的开发来说,无外乎B/S.C/S和Android.iO ...
- 1、HTML学习 - IT软件人员学习系列文章
本文做为<IT软件人员学习系列文章>的第一篇,将从最基本的开始进行描述,了解的人完全可以跳过本文(后面会介绍一些工具). 今天讲讲Web开发中最基础的内容:HTML(超文本标记语言).HT ...
随机推荐
- SQL2005自动备份,定期删除的维护计划及自动定期清除日志
作为一名DBA,他们最常见的日常任务是: 1)定期完成数据库的完全备份或差异备份.2)定期清理备份文件,因为存储空间有限,可能只需要保存一个时期段内的文件(比如一周内或一月内). 而如何做到这两点呢? ...
- 我是如何在实际项目中解决MySQL性能问题
可能是本性不愿随众的原因,我对于程序员面试中动辄就是考察并发上千万级别的QPS向来嗤之以鼻,好像国内的应用都是那么多用户量一样,其实并发达到千万,百万以上的应用能有几个? 绝大多数的程序员面临的只是解 ...
- HashMap基础知识
HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一. JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap ...
- python-基础-基础知识-变量-选择-循环
1 基础知识 1.1 注释的分类 1.2 变量以及类型 变量定义 num1 = 100 #num1就是一个变量,就好一个小菜篮子 num2 = 87 #num2也是一个变量 result = num1 ...
- CString转const char
CString转换成const char 需要考虑一个因素: 你使用是否为unicode 不使用unicode: CString Cstr("aaaaaaa"); co ...
- 过滤html标签的一个函数
str_replace(array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…', '&'), ar ...
- 更改电脑用户名(可更改C:\Users\用户名)
参考:http://blog.csdn.net/zhang_jinhe/article/details/40624847 假设我们需要将帐户A改名为B. 首先我们需要用另一个管理员帐户C登陆系统. 1 ...
- hdu 1269 (强联通分量Tarjan入门)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- GIT → 01:学习版本控制的原因
1.1 没有版本控制出现的问题 备份多个版本,浪费存储空间,花费时间长. 难以恢复至以前的历史版本,容易引发BUG,解决代码冲突困难. 难于追溯问题代码的修改人和修改时间.修改内容.日志信息. 项目升 ...
- spring基于xml的声明式事务控制配置步骤
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...