2024年3月10日发(作者:)
1、iOS 9 多任务分屏要点技术分享
9 多任务综述
iOS 9
中最引人注目的新特性就是多任务了,在很久以前的越狱开发里就已经出现过
类似的插件,而像是 Windows Surface
系列上也已经有分屏多任务的特性,可以让用户同时使用两个或多个 app。iOS
9 中也新加入类似的特性。iOS 9
中的多任务有三种表现形式,临时出现和交互的滑动覆盖 (Slide
Over),真正的分屏同时操作两个 app 的分割视图 (Split View),以及在其他
app 里依然可以进行视频播放的画中画 (Picture in Picture) 模式。
在关于多任务的文档中,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
布局方式。如果你已经在使用这套布局方式了的话,那么可以说多任务视图的
支持也就顺带自动完成了。不过如果你完全没有使用过甚至没有听说过这套布
局方法的话,我去年的一篇笔记可能能帮你对此有初步了解,在下一节里我也
会稍微再稍微复习一下相关概念和基本用法。
2.
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 如下图所示:
针对 Size Class
进行开发的思想下,我们不再关心具体设备的型号或者尺寸,而是根据特定的
Size Class 的特性来展示内容。在 Regular
的宽度下,我们可以在水平方向上展示更多的内容,比如同时显示 Master 和
Detail View Controller
等。同样地,我们也不应该再关心设备旋转的问题,而是转而关心 Size Class
的变化。在开发时,如果是使用 Interface Builder 的话,在制作 UI
时就注意为不同的 Size Class
配置合适的约束和布局,在大多数情况下就已经足够了。如果使用代码的话,U
ITraitCollection 类将是使用和操作 Size Class
的关键。我们可以根据当前工作的 UIViewController 的 traitCollection
属性来设置合适的布局,并且在 -
willTransitionToTraitCollection:withTransitionCoordinator: 和 -
viewWillTransitionToSize:withTransitionCoordinator: 被调用时对 UI
布局做出正确的响应。
发布评论