如果你越过狱,或者玩过苏菲,你一定对有过多个 App 同时运行同时显示同时使用的操作,使用 iOS 的小伙伴们最心痛的莫过于多任务,不过这一切都被 iOS 9 终结于此。

关于其他 iOS 9 的特性与功能,有兴趣的朋友可以参考我博客中的 iOS 9 适配系列

在 iOS 9 中,多任务共有三种表现形式:

  • Slide Over: 临时出现\交互的滑动覆盖

  • Split View: 分屏多任务,目前 Split View 支持的分屏比例有三个,分别为 1/21/32/3

  • Picture in Picture: 视频播放画中画

Slide Over 滑动覆盖

在苹果的官方文档中指出,绝大部分 App 应当适配 Slide Over,且这项功能在系统中也是默认开启的,你可以在设置中的 通用 => 多任务 中查看和更改 允许多个应用 选项。

Slide Over

Split View 分屏多任务

虽然 Split View 并不是全设备支持,但苹果仍希望绝大部分的 App 都应当适配 Split View。

Split View

也正是因此,在 XCode 7 中新建的项目,默认开启多任务支持。当然尽管如此你还是可以出于某些原因(例如懒)勾选 Requires full screen 或在 Info.plist 中添加 UIRequiresFullScreen 并设为 YES 来请求全屏体验。

在有了分屏支持的基础上,我们还需要在 Info.plist 中做进一步的配置:

  • UILaunchStoryboardName: 通常使用启动界面 LaunchScreen.xib 即可,即填入 LaunchScreen

  • UISupportedInterfaceOrientations: 需要支持上下左右四个方向的选装,可以在 Target 中通过勾选实现,四个方向分别是:

    • UIInterfaceOrientationPortrait

    • UIInterfaceOrientationPortraitUpsideDown

    • UIInterfaceOrientationLandscapeLeft

    • UIInterfaceOrientationLandscapeRight

<key>UILaunchStoryboardName</key>
     <string> LaunchScreen </string>
<key>UISupportedInterfaceOrientations</key>
     <array>
			<string>UIInterfaceOrientationPortrait</string>
			<string>UIInterfaceOrientationPortraitUpsideDown</string>
			<string>UIInterfaceOrientationLandscapeLeft</string>
			<string>UIInterfaceOrientationLandscapeRight</string>
     </array>

接下来,对于分屏的适配,最主要的部分就是 UI 的自适应,如果说你的项目完全做到了 UI 的自适应,那么这项适配工作将变得简单许多;否则,请做好加班准备。

对于使用 Size Classes 的项目来说,还有些问题需要注意,在此前 iPad 界面水平与垂直均为 Regular 布局,而随着分屏功能的出现,在水平方向上要分为 RegularCompact 两种布局,也就意味着你需要处理 w:Regular h: Regularw:Compact h:Regular 两种状态。

Size Classes

如果你的项目使用了/准备使用纯代码的模式,建议你通过 UIViewtraitCollection 属性获取当前 SizeClass 类型再做布局,并通过控制器的 willTransitionToTraitCollection:withTransitionCoordinator:viewWillTransitionToSize:withTransitionCoordinator: 方法获取新的 SizeClass 类型再做调整。如果你不是初学者,我并不建议你使用苹果原生的 API 来构建 UI 布局,因为这样会大量增加代码量,不易于维护,而知名的第三方布局库诸如 PureLayoutMasonry 都是不错的选择。

此外需要注意,随着分屏功能的出现,应用中 UIScreen.mainScreen().boundsUIWindow.keyWindow().bounds 不再相同,请根据需要自行选择。

如果你对 Auto Layout 和 Size Classes 不太了解,可以参考 喵神的相关博客

如果你不清楚应该使用纯代码还是 XIB/Storyboard 搭建 UI,请参考 唐巧的相关博客