你的位置:首页 > 操作系统

[操作系统]iOS 9 分屏多任务(1):入门

原文出处: @钢铁侠般的卿哥   欢迎分享原创到伯乐头条

重要

这是API或开发技术的初步文档。苹果公司提供这些信息主要是为了帮助你通过苹果产品使用这些技术或者编程接口而做好计划,该信息有可能会在未来发生改变,本文当中提到的软件应该以最终发布的操作系统测试和最终文档为准。未来有可能会提供新版本的文档信息。

iOS 9 中多任务处理功能,为我们提供了更多的方式来畅享iPad和App带来的乐趣。

  • Slide Over用户可通过该功能调出屏幕右侧的悬浮视图(在从右到左的语言环境下位于屏幕的左侧),从而查看次要应用程序并与其进行交互。
  • Split View(分屏视图):呈现两个并行的应用,用户可以查看、调整其大小,并与其进行交互。
  • 画中画(Picture in Picture)功能:让用户在多个应用中可以悬浮播放视频,并可移动视频窗口以及调整窗口大小。

在Slide Over功能中,全屏显示的App 是主App。在Slide Over上选中的App 是次要App。在分屏视图Split View(在从左至右写的语言环境下)左侧的App是主要App,右侧的 是次要App。

 

 

 

 

如果你遵循了苹果iOS 8最佳实践建议,所有这些新的与App的交互方式,尤其是iOS 9中的多任务处理都是非常的简单和直观。从Xcode 7开始,每一个iOS App 模板都默认支持Slide Over 和 Split View。

从开发者的角度来说,最大的挑战是资源的管理。

每个iOS App(甚至那些没有使用多任务功能的App)需要在iOS9中良好地运行。现在,甚至全屏App 们都没有有效地利用整个屏幕、CPU、内存以及其他的资源。例如,用户可以:

  • 在屏幕上添加画中画窗口,不管屏幕上展示了什么内容(包括一个全屏App),这个包含视频的App会持续地在后台运行。来自其他App的PiP会增加App的内存压力,同时会降低App的显示帧率。
  • 滑动Slide Over 来使用次要App。当它是可视状态时,次要App在前台 运行,会再次增加App的内存压力,减少App的显示帧率。
  • 通过Slide Over 从次要App中调出键盘会遮盖主要App的一部分。每个iOS9 开发者,甚至开发全屏显示App却从未使用过keyboard 的开发者,可能希望能像UIWindow Class Reference中描述的那样响应键盘出现的通知。

 

为了能有效地参与到这种环境中,iOS9开发者必须谨慎调整他们的App 的资源消耗。如果一个App 每一帧消耗了太多的时间,屏幕的刷新率会低于60帧每秒。在内存压力下,系统会终止消耗最多内存的App。

想了解更多如何在iOS 9中如何管理资源,请查看Multitasking Mindset。

了解App的特征并审视自己的工作

考虑你的App的特征后再决定你想采用哪种多任务增强功能,以及需要做什么工作。

大多数App应该采用Slide Over 和 Split View。从用户的角度来说,一个iOS 9应用不支持这两项特性是有点格格不入的。

如果你的App符合以下情况之一,可以不支持多任务处理功能:

  • 以相机为中心的App,使用整个屏幕预览和以快速捕捉瞬间为主要功能。
  • 使用全设备屏幕的App,比如游戏使用iPad的传感器作为游戏核心操控的一部分。

除此之外,苹果和你的用户们都希望你采用Slide Over 和 Split View。欲了解更多,请参看Slide Over & Split View Quick Start。

如果不使用Slide Over 和 Split View,需将UIRequiresFullScreen key添加到Xcode 工程的Info.plist文件中,并且设置其Boolean value为YES。

注意:不使用Slide Over 和 Split View,表示你的App 不能出现在Slide Over 区域中,尽管你的App 运行在多任务环境中。在你想支持的硬件上测试App,以确保当其他App出现在Slide Over模式中,以及在播放来自第三个App的视频的画中画模式下,你的App都能流畅运行。

画中画(PiP)适用于以播放视频为主要功能的App。画中画(PiP)也最佳适合中长时间的内容播放。

支持画中画,能让你的用户在视屏播放的同时,还能与你App或其他的App交互。学习和运用PiP,请阅读Picture in Picture Quick Start。

在游戏场景的过渡、首次启动以及类似的内容不应该支持画中画(PiP)。你可以选择给定的视频退出画中画,如下所示:?

  • 对于AVPlayerViewController类,设置allowsPictureInPicturePlayback属性值为NO。
  • 对于AVPlayerLayer类,不要用你的播放层对象实例化一个AVPictureInPictureController对象
  • 对于WKWebView类,设置其allowsPictureInPictureMediaPlayback属性为NO(这个属性在未来iOS 9beta版本中才可使用)。

注意:如果你的App使用Media Player 框架播放视频,无论使用其框架中的MPMoviePlayerController或MPMoviePlayerViewController类,你必须迁移使用AVKit或AV Foundation。Media Player视频播放正式在iOS 9中弃用。

如果你的App 播放HTTP Live Streaming (HLS)视频,请使用元数据优化播放。通过响应stream-variant元数据标签,优化应用程序在各种视屏窗口大小下的性能。并最大限度地减少电池消耗,你使用的内容分发网络(CDNs)同样也应该提供多个stream variants,并用合适的分辨率标签标注每个variant。欲了解更多信息,请参阅 HTTP Live Streaming Overview。

如果你的应用程序在第二个物理屏幕上展示内容,请测试应用的转场。

特别需要测试从次要App过渡到主要App的用例。只有主要App才有资格使用第二个物理屏幕,所以过渡到主要App是一个新的场景,你的App可以从中接收UIScreenDidConnectNotification 通知。确保你的App可帮用户理解使用实例中发生了什么,当内容移动到第二屏上时,这可能有点奇怪。

开发环境

Xcode7 支持在iPad上使用多任务增强。

 

使用Xcode 7、模拟器和Instruments 中的新功能:

  • 在每个iOS App模板中预先配置支持Slide Over 和 Split View。例如,包括LaunchScreen.storyboard文件和预先设置的Info.plist文件。详见:Xcode 概述
  • Interface Builder中的Storyboards可以很容易实现自动布局约束。详见 Auto Layout Guide 和 Auto Layout Help。
  • Interface Builder 预览助手让你能立即看到在Slide Over 和Split View场景中,你的布局如何适配不同的Size Class。请参阅 Size Classes Design Help 和 ?Previewing Your Layout for Different Localizations, iOS Devices, and iOS Versions。
  • Xcode 7中的模拟器可让你使用在真实设备中相同的手势调出Slide Over 和 Split View。你可以使用模拟器测试所有Slide Over和Split View 布局表现,也可测试画中画。然而,模拟器不能模拟真实iOS设备的内存、CPU、GPU、磁盘I/O,或iOS设备的其他资源特性。有关模拟器的使用指南,请参阅 Simulator User Guide。
  • Instrument中的内存分配、Time Profiler、内存泄露分析模板(Leaks profiling templates),能让你监测App的行为和资源使用情况。详见:Instruments User Guide?和 Instruments Help.
  • Xcode7 提供了可视化界面,用于全面支持资源目录(asset catalog)。为你的可视化资源使用资源目录,如图片和App图标。这对于优化App的内存十分重要。参见Asset Catalog Help。你也可以以编程的方式使用资源目录,请参阅 UIImageAsset Class Reference?。

想要测试内存、CPU、GPU以及所有硬件相关的表现,请在你想要支持的硬件上测试App。想要在iOS设备上测试你的App,你必须是iOS开发者计划的成员。请参阅 App Distribution Guide 中的 Managing Accounts 。

在iOS9中,以下型号的iPad支持多任务增强。

 

多任务思维模式

想要在支持iOS 9的iPad上的取得成功,不管是对系统,还是设备上的其他App,你的App必须在设备资源方面表现良好。

当你的App在前台运行时,其他的App可能会在它一旁运行,也可能播放画中画视频,并且持有它的App在后台运行。

在iOS9之前,你可以使用任何可用的CPU、GPU、内存、I/O以及硬件资源维持极好的体验。在iOS 9中,这些都将改变。App如何有效地利用资源成为了问题关键,如此,用户的iPad体验才是流畅和响应灵敏的。

为了获得最佳的用户体验,系统会紧密地管理资源消耗情况,并终止使用超过系统配额资源的App。

你在iPad上采用多任务处理增强的大部分工作,很有可能是对资源管理的最佳实践。第一步:

  • 使用Instrument测试你的App确保其没有内存泄露,不会无限内存增长或阻塞主线程。
  • 使用应用状态转变的协议方法,当你的App移到后台时,丢弃不必要的视图控制器、视图、资源和数据缓存。
  • 在每个所支持的设备上测试你的App,并同时使用资源密集型App,例如地图App,将其设置卫星视图和执行立交桥图像动画。以你的App分别作为主要App和次要App进行测试,确保两种情况下你的App和地图App都能快速响应。

在iOS 9中,不再适合从屏幕的界面方向来考虑。App能在iPad上适应水平方向上的compact Size Class或是regular Size Class,大小改变独立于界面的方向。相反要使用trait collections和Size Classes,采用UIContentContainer和UITraitEnvironment协议,请参阅Slide Over and Split View Quick Start所述。

同样在iOS 9中也不再适合使用屏幕的范围限制来判断你的App的可见区域,而是使用你App的窗口的范围来判断。注意你的App的范围应该是可操控。你不能设置App的范围界限,也不能阻止其改变。

尽管Auto Layout 自动布局不是最佳iOS 9 App所必须,但这样做会更容易。自动布局提供了性能的优势,并帮助你匹配苹果在 iOS Human Interface Guidelines 中描述的最佳实践。简单地说,Auto Layout帮助你的内容显示在正确的地方,并有助于未来你的App的迭代。你可以反复使用Auto Layout,一次一个布局。至少你的LaunchScreen.storyboard文件必须使用Auto Layout。纵观你的App,使用Storyboards帮助你的视图适应用户在不同情况下打开和使用你的App时视图尺寸的变化。

 

  都说程序员的工资高,却很少了解他们加班的痛苦,你是不是每次也在心里想,按时间折算下来这个工资都给少了,于是会想在心里呐喊,要么涨工资,要么涨工资,要么涨工资,为什么??因为不让我们加班,这是不可能的!!!

  想要颠覆自己的工作模式吗?想要减少自己的加班时间吗?加入我们,和我们一起探寻属于我们程序员的自由模式吧!

  一款针对程序员的原生APP,以共享知识技能为目的,以悬赏方式在线互动交互平台。

  我们拥有高达近20人顶尖的技术团队,以及优秀的产品及运营团队。团队领军人物均在行业内有10年以上的丰富经验。

  现在我们正在招募原始的参与英雄,您将同我们一起改变程序员的工作方式,改变程序员的世界!同时也会有丰厚的报酬。作为我们的原始的参与者,您将同我们一起体验这款程序员神器,您可以提出专业的建议,我们会虚心采纳。每一个人都会是英雄,而您就会是我们需要的英雄!同时您也可以邀请您的朋友一起参与这场英雄的招募互动。

  我们不会耽误你太多时间,我们只需要您的专业看法,只要您从一个月内抽出1个小时,以后您每天都可以节省两个小时,一切都是为了我们自己!

  来?还是不来?

  接头人暗号:1955246408 (QQ)