iOS9 每日学习第6天:Split Screen Multitasking

532 查看

iOS 9 的一个重大变化就是增加了多任务,这个多任务允许用户在屏幕上同时运行多个 app。有两种形态,Slide Over(滑动覆盖视图) 和 Splite View(分割视图)。

Slide Over View


slide over

这种形式下,用户可以从右侧划出一个窄的区域,在这个区域里展示了应用的列表,然后你可以选择打开一个,在这个区域里展示。它出现在你前面运行的程序之上,并且两个应用之间不会有任何相互操作和影响。

Split View


split

为了打开 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里,对于多任务仍然有效,并且更重要了。你可以根据需求,来检测方向和手动比较宽高等。

键盘响应事件

以前,只有当你打开应用时,键盘事件才有效。现在,有可能仅仅是最上层的应用需要键盘,他就出现了。


keyboard

某些情况下,出现键盘可能对你的应用并无影响。但有时,可能键盘会挡住你的应用的一块儿重要位置,这时 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