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 ...
随机推荐
- 移动端网站如何开发(电脑端网站到手机端网站我们需要在html代码中添加哪个meta标签)
移动端网站如何开发(电脑端网站到手机端网站我们需要在html代码中添加哪个meta标签) 一.总结 一句话总结: 添加viewport标签:meta name="viewport" ...
- Java SE、Java EE、Java ME三者的区别
1. Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程 ...
- python 日记 day3
数据类型的概况:1.int 用于计算. 2.str 用于存储少量数据. 3.list 用于存储大量数据. 4.元祖 又叫只读列表,元素不可更改. 5. dic 用于存储关系型对象 . 6.集合 A.i ...
- 015-WebDriver API
1. 从定位元素开始 8种元素定位方法 id find_element_by_id( ) name find_element_by_name( ) tag find_element_by_tag_na ...
- HTML5中类jQuery选择器querySelector和querySelectorAll的使用
支持的浏览IE8+,Firefox3.5+,Safari3.1+ Chrome和Opera 10+ 1.querySelector()方法接收一个选择符,返回第一个匹配的第一个元素,如果没有返回nul ...
- 2019-2-19-win10-uwp-客户端如何发送类到-asp-dotnet-core-作为参数
title author date CreateTime categories win10 uwp 客户端如何发送类到 asp dotnet core 作为参数 lindexi 2019-2-19 9 ...
- Luogu P3459 [POI2007]MEG-Megalopolis(线段树)
P3459 [POI2007]MEG-Megalopolis 题意 题目描述 Byteotia has been eventually touched by globalisation, and so ...
- js中的观察者模式与发布者/订阅者模式的区别?
- 2019阿里云开年Hi购季大促主会场全攻略!
2019阿里云云上采购季活动已经于2月25日正式开启,从已开放的活动页面来看,活动分为三个阶段: 2月25日-3月04日的活动报名阶段.3月04日-3月16日的新购满返+5折抢购阶段.3月16日-3月 ...
- View的滑动冲突和解决方案
1.滑动冲突原因: 当有内外两层View同时可以滑动的时候,这个时候就会产生滑动冲突. 2.常见的冲突场景: 场景1: 场景2: 场景3: 4.解决方法种类: (1)外部拦截法: 针对场景1,我们可以 ...