iOS 9 分屏多任务:Slide Over & Split View快速入门(中文版)
按照本章中的指导,在支持的iPad设备上让你的App运行iOS 9多任务。
当你新建一个Xcode 7模板工程时,是默认支持Slide Over和Split View。如果你从老的工程升级到iOS 9,通过以下的步骤设置你的Xcode工程配置,从而让App支持Slide Over和Split View:
- 按照 App Distribution Guide 中 Setting the Base SDK 的描述,将Base SDK设置为“Latest iOS”。
- 提供LaunchScreen.storyboard 文件(而不是在iOS 7以及更早版本中的.png图片文件)。请参阅 App Distribution Guide 中的 Creating a Launch Screen File。
- 在项目的Info.plist文件中的“Supported interface orientations (iPad)”数组,声明支持所有四个设备方向,如下所示
注意:如果你一定不支持Slide Over和Split View,在你的Xcode 项目的Info.plist文件中显式地加入UIRequiresFullScreen关键字并为其Boolean值赋上YES。你可以在属性列表编辑器,或在目标编辑器的General>Deployment Info区域设置。
提示:通过设置Settings > General > Multitasking,用户可禁用Slide Over和Split View 。如果你已经把一切都设置正确后,但仍无法使用这些特性,你可以检查这项设置。
对于如何使用Slide Over和Split View,可以下载Lister (for watchOS, iOS, and OS X)示例代码工程。
在 Slide Over and Split View中,主要和次要App都同时运行在前台,大多数情况下它们都是平等的。但只有主要App可以:
- 拥有自己的状态栏;
- 有资格使用第二物理屏幕工作;
- 可使用画中画自动调用;
- 可以占用横屏下的2/3屏幕面积,并且在分屏视图中,水平方向上是regular Size Class(横屏Split View中,次要应用最多占用二分之一的屏幕,并且在水平方向上是compact Size Class)。
在Split View中,用户控制你的应用程序窗口的大小。用户通过旋转设备(如在iOS的早期版本),或者水平滑动分割主要应用和次级应用程序的垂直分隔线来此操作。当两种类型的变化发生时,系统以同样的方式通知你的应用程序:窗口范围界限的改变会伴随改变根视图控制器的Size Classes。(用户移动分屏控件也会显示App状态过渡,在本节后面介绍。)
此前,iPad的水平和垂直Size Classes总是“regular”。随着Slide Over 和 Split View出现,这些都已经有很大的改变。下图显示了你的App会遇到用户操作iPad屏幕后不同的Size Classes。
为了App的内容正确显示,你的App必须是自适应的。你的App设置应当:
- 按照 Auto Layout Guide、Size Classes Design Help 以及 Simulating Screen Size and Orientation 中描述的那样使用Auto Layout和Size Classes。
- 这要求App中的LaunchScreen.storyboard文件必须支持Auto Layout。使用Xcode 7中的App模板创建的新工程会自动生成LaunchScreen.storyboard文件。学习如何添加这个文件到你的工程中,请参阅 App Distribution Guide 中的Creating a Launch Screen File 内容。
- 实现 UITraitEnvironment?和 UIContentContainer 中的方法,响应?trait collection和尺寸大小的改变。
- 按照 App Programming Guide for iOS 中 Execution States for Apps 中所述,响应App状态转换协议方法调用。
- 正确地处理你的App的状态转换在iOS9中尤为重要。在Split View上下文中,每当用户移动Split View分割器时,屏幕上的两个应用程序都将移动到屏幕之外。甚至是当用户改变主意并将分割器返回起点时,这种情况也会发生。
当用户移动分割控件时,系统会使用 ApplicationWillResignActive: 协议方法调用App委托对象。
系统会重新调整你的App(屏幕外)以捕捉到一个或多个快照,确保当用户最终释放分隔控件时能提供流畅的用户体验。这是因为在用户最终释放分隔控件时无法预测应用的窗口最终边界。更复杂的场景是设备的旋转和移动分隔器同时进行。
保证你的App在大小改变、快照获取处理中不丢失数据状态或导航状态。这就是当一个用户改变App大小--移动分隔器并将其移动到初始位置最后释放这个分隔器,这一系列的情况下,用户期望App的状态,导航位置(包括视图、选择、滚动位置以及其他等)能与用户最初触摸分隔器时一样。充分使用 ApplicationWillResignActive: 调用保存用户的状态。详情请阅读 App Programming Guide for iOS 中 What to Do When Your App Is Interrupted Temporarily 一节。
如果用户移动分隔控件直到屏幕边界让你的App消失,那系统会调用 ApplicationDidEnterBackground: 协议方法。