iOS 9 多任务分屏要点

iOS 9 中最引人注目的新特性就是多任务了,在很久以前的越狱开发里就已经出现过类似的插件,而像是 Windows Surface 系列上也已经有分屏多任务的特性,可以让用户同时使用两个或多个 app。iOS 9 中也新加入类似的特性。iOS 9 中的多任务有三种表现形式,临时出现和交互的滑动覆盖 (Slide Over),真正的分屏同时操作两个 app 的分割视图 (Split View),以及在其他 app 里依然可以进行视频播放的画中画 (Picture in Picture) 模式。

iOS 9 多任务分屏要点

在关于多任务的文档中,Apple 明确指出:

绝大部分 app 都应当适配 Slide Over 和 Split View

因为这正是 iOS 9 的核心功能之一,也是你的用户所期望看到的。另一方面,支持多任务也增加了你的用户打开和使用你的 app 的可能。不过多任务有一点限制,那就是在能够安装 iOS 9 的 iPad 设备上,仅只有性能最强大的 iPad Air 2 和之后的机型支持分割视图模式,而其他像是 iPad mini 2,iPad mini 3 以及 iPad Air 只支持滑动覆盖和画中画两种模式。这在一定程度上应该还是基于移动设备资源和性能限制的考虑做出的决策,毕竟要保证良好的使用体验为前提,多任务才会有意义。

对于开发者来说,虽然多种布局看起来很复杂,但是实际上如果紧跟 Apple 的技术步伐的话,将自己的 iPad app 进行多任务适配并不会是一件非常困难的事情。因为滑动覆盖模式和分割视图模式所采用的布局其实就是 Compact Width 的布局,而这一概念就是 WWDC14 上引入的基于屏幕特征的 UI 布局方式。如果你已经在使用这套布局方式了的话,那么可以说多任务视图的支持也就顺带自动完成了。

Adaptive UI 复习

Adaptive UI 是 Apple 在 iOS 8 提出的概念。在此之前,我们如果想要同时为 iPhone 和 iPad 开发 app 的话,很可能会写很多设备判断的代码,比如这样:

if UI_USER_INTERFACE_IDIOM() == .Pad { // 设备是 iPad }

除此之外,如果我们想要同时适配横向和纵向的话,我们会需要类似这样的代码:

if UIInterfaceOrientationIsPortrait(orientation) { // 屏幕是竖屏 }

这些判断和分支不仅难写难读,也使适配开发困难重重。从 iOS 8 之后,开发者不应该再依赖这样设备向来进行 UI 适配,而应该转而使用新的 Size Class 体系。Apple 将自家的移动设备按照尺寸区别,将纵横两个方向设计了 Regular 和 Compact 的组合。比如 iPhone 在竖屏时宽度是 Compact,高度是 Regular,横屏时 iPhone 6 Plus 宽度是 Regular,高度是 Compact,而其他 iPhone 在横屏时高度和宽度都是 Compact;iPad 不论型号和方向,宽度及高度都是 Regular。现有的设备的 Size Class 如下图所示:

iOS 9 多任务分屏要点

针对 Size Class 进行开发的思想下,我们不再关心具体设备的型号或者尺寸,而是根据特定的 Size Class 的特性来展示内容。在 Regular 的宽度下,我们可以在水平方向上展示更多的内容,比如同时显示 Master 和 Detail View Controller 等。同样地,我们也不应该再关心设备旋转的问题,而是转而关心 Size Class 的变化。在开发时,如果是使用 Interface Builder 的话,在制作 UI 时就注意为不同的 Size Class 配置合适的约束和布局,在大多数情况下就已经足够了。如果使用代码的话,UITraitCollection 类将是使用和操作 Size Class 的关键。我们可以根据当前工作的 UIViewController 的 traitCollection 属性来设置合适的布局,并且在 -willTransitionToTraitCollection:withTransitionCoordinator: 和 -viewWillTransitionToSize:withTransitionCoordinator: 被调用时对 UI 布局做出正确的响应。

虽然并不是理论上不可行,但是使用纯手写来操作 Size Class 会是一件异常痛苦的事情,我们还是应该尽可能地使用 IB 来减少这部分的工作量,加快开发效率。

iPad 中的多任务适配

对于 iOS 9 中的多任务,滑动覆盖和分割视图的初始位置,新打开的 app 的尺寸都将是设备尺寸的 1/3。不过这个比例并不重要,我们需要记住的是新打开的 app 将运行在 Compact Width 和 Regular Height 的 Size Class 下。也就是说,如果你的 iPad app 使用了 Size Class 进行布局,并且是支持 iPhone 竖屏的,那么恭喜,你只需要换到 iOS 9 SDK 并且重新编译你的 app,就搞定了。

因为本文的重点不是教你怎么开发一个 Adaptive UI 的 app,所以并不打算在这方面深入下去。如果你在去年缺了课,不是很了解这方面的话,这篇教程可能可以帮你快速了解并掌握这些内容。如果你想要直接上手看看 iOS 9 中的 多任务是如何工作的话,可以新建一个 Master-Detail Application,并将其安装到 iPad 模拟器上。Master-Detail 的模板工程为我们搭设了一个很好的适配 Size Class 的框架,让项目可以在任何设备上都表现良好。同样你也可以观察它在 iOS 9 的 iPad 上的表现。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/ac7ca2867042b6beb4036b8825f6acae.html