Xamarin.iOS 中适用于 iPad 的多任务
iOS 9 支持使用侧拉窗口或拆分视图同时运行两个应用。 它还支持播放图片中的视频。
iOS 9 添加了在特定 iPad 硬件上同时运行两个应用的多任务支持。 iPad 多任务处理通过以下功能受到支持:
- 侧拉 - 允许用户在滑出面板(根据语言方向,位于屏幕的右侧或左侧)中临时运行第二个 iOS 应用,该面板覆盖当前运行的主应用大约 25% 的空间。 “侧拉”仅在 iPad Pro、iPad Air、iPad Air 2、iPad Mini 2、iPad Mini 3 或 iPad Mini 4 上可用。
- 分屏浏览 - 在受支持的 iPad 硬件(仅限 iPad Air 2、iPad Mini 4 和 iPad Pro)上,用户可以选择第二个应用,并在分屏模式下与当前正在运行的应用并行运行。 用户可以控制每个应用占用主屏幕的百分比。
- 画中画 - 对于播放视频内容的应用,现在可在可移动且可调整大小的窗口中播放视频,该窗口浮动在 iOS 设备上当前正在运行的其他应用上方。 用户可以完全控制该窗口的大小和位置。 画中画仅适用于 iPad Pro、iPad Air、iPad Air 2、iPad Mini 2、iPad Mini 3 或 iPad Mini 4。
支持应用中的多任务时,需要考虑许多事项,包括:
作为应用开发人员,还可以选择退出多任务,包括禁用 PIP 视频播放。
本文将介绍确保 Xamarin.iOS 应用在多任务环境中正确运行或如何选择退出多任务(如果它不适合你的应用)所需的步骤。
iPad 多任务视频
多任务快速入门
若要支持侧拉窗口或拆分视图,应用必须执行以下操作:
- 针对 iOS 9(或更高版本)生成。
- 将情节提要用于其启动屏幕(而不是图像资产)。
- 将情节提要用于其 UI 的自动布局和大小类。
- 支持所有 4 个 iOS 设备方向(纵向、反置纵向、横向向左和横向向右)。
适用于 iPad 的多任务
iOS 9 在 iPad 上引入了侧拉窗口、拆分视图(仅限 iPad Air 2、iPad Mini 4 和 iPad Pro)和画中画,在 iPad 上提供了新的多任务功能。 我们将在以下部分中更深入地了解这些功能。
侧拉窗口
侧拉窗口功能允许用户选取第二个应用,并将其显示在小型滑动面板中,以提供快速交互。 侧拉窗口面板是临时的,当用户返回到使用主应用时将关闭。
要记住的主要事项是,用户决定哪些两个应用将并行运行,并且开发人员无法控制此过程。 因此,需要执行一些操作来确保 Xamarin.iOS 应用侧拉窗口面板中正确运行:
- 使用自动布局和大小类 - 由于 Xamarin.iOS 应用现在可以在滑出侧面板中运行,因此你不再依赖于设备、其屏幕大小或 UI 布局方向。 若要确保应用正确缩放其接口,需要使用“自动布局”和“大小类”。 有关详细信息,请参阅我们的统一情节提要简介文档。
- 高效使用资源 — 因为你的应用现在可以与其他正在运行的应用共享系统,因此你的应用有效使用系统资源至关重要。 当内存变得稀疏时,系统会自动终止消耗最多内存的应用。 有关详细信息,请参阅 Apple iOS 应用的节能指南。
“侧拉”仅在 iPad Pro、iPad Air、iPad Air 2、iPad Mini 2、iPad Mini 3 或 iPad Mini 4 上可用。 若要详细了解如何为幻灯片放映准备应用,请参阅 Apple 在 iPad 上采用多任务增强功能文档。
拆分视图
在受支持的 iPad 硬件(仅 iPad Air 2、iPad Mini 4 和 iPad Pro)上,用户可以选取第二个应用,并在拆分屏幕模式下并行运行当前正在运行的应用。 用户可以通过拖动屏幕分隔线来控制每个应用占用的主屏幕的百分比。
与幻灯片放映一样,用户决定哪些两个应用将并行运行,开发人员无法控制此过程。 因此,拆分视图对 Xamarin.iOS 应用提出了类似的要求:
- 使用自动布局和大小类 — 因为 Xamarin.iOS 应用现在可以在用户指定大小的拆分屏幕模式下运行,因此你不再依赖于设备、其屏幕大小或方向来布局 UI。 若要确保应用正确缩放其接口,需要使用“自动布局”和“大小类”。 有关详细信息,请参阅我们的统一情节提要简介文档。
- 高效使用资源 — 因为你的应用现在可以与其他正在运行的应用共享系统,因此你的应用有效使用系统资源至关重要。 当内存变得稀疏时,系统会自动终止消耗最多内存的应用。 有关详细信息,请参阅 Apple iOS 应用的节能指南。
若要详细了解如何为拆分视图准备应用,请参阅 Apple 在 iPad 上采用多任务增强功能文档。
画中画
新的画中画功能(也称为 PIP)允许用户在小型浮动窗口中观看视频,用户可以将屏幕上的任意位置定位在其他正在运行的应用之上。
与“侧拉窗口”和“拆分视图”一样,用户完全控制在“画中画”模式下的观看视频操作。 如果应用的主要功能是观看视频,则需要进行一些修改才能在 PIP 模式下正常运行。 否则,无需更改即可支持 PIP。
要使应用在用户请求中显示 PIP 视频,需要 AVKit 或 AV Foundation API。 iOS 9 中已弃用媒体播放器框架,不支持 PIP。
画中画仅适用于 iPad Pro、iPad Air、iPad Air 2、iPad Mini 2、iPad Mini 3 或 iPad Mini 4。 有关详细信息,请参阅 Apple 的画中画快速入门文档。
在应用中支持多任务
对于任何现有的 Xamarin.iOS 应用,只要你的应用已经遵循 Apple 针对 iOS 8 的设计指南和最佳做法,支持多任务就是一项透明任务。 这意味着应用应将情节提要用于其用户界面布局的自动布局和大小类(有关详细信息,请参阅我们的统一情节提要简介)。
对于这些应用,支持多任务并在其中运行良好,几乎不需要做任何更改。 如果你的应用的 UI 是使用其他方法创建的,例如直接定位和调整 C# 代码中的 UI 元素的大小,或者它依赖于特定的设备屏幕大小或方向,则需要进行重大修改才能正确支持 iOS 9 多任务。
若要在任何新的 Xamarin.iOS 应用中支持 iOS 9 多任务,请针对所有应用的用户界面布局再次使用情节提要和大小类,并实现以下部分中的说明。
屏幕大小和方向注意事项
在 iOS 9 之前,可以针对特定的设备屏幕大小和方向设计应用。 由于应用现在可以在“滑出”面板或拆分视图模式下运行,因此无论设备的物理方向或屏幕大小如何,它都可以发现自己在 iPad 上的紧凑或常规水平大小类中运行。
在 iPad 上,全屏应用具有常规水平和垂直大小类。 除 iPhone 6 Plus 和 iPhone 6s Plus 以外的所有 iPhone,在任何方向都有两个方向的紧凑大小类。 iPhone 6 Plus 和 iPhone 6s Plus 在横向模式下具有常规水平大小类和紧凑垂直大小类(非常类似于 iPad Mini)。
在支持“侧拉窗口”和“拆分视图”的 iPad 上,最终可以采用以下组合:
方向 | 主应用 | 辅助应用 |
---|---|---|
纵向 | 屏幕的 75% 紧凑水平 常规垂直 |
屏幕的 25% 紧凑水平 常规垂直 |
横向 | 屏幕的 75% 常规水平 常规垂直 |
屏幕的 25% 紧凑水平 常规垂直 |
横向 | 屏幕的 50% 紧凑水平 常规垂直 |
屏幕的 50% 紧凑水平 常规垂直 |
在示例应用中,如果应用在横向模式下的 iPad 上全屏运行,它将同时显示列表和详细信息视图:
如果同一应用在“侧拉窗口”面板中运行,则会将其布局为紧凑水平大小类并仅显示列表:
为了确保应用在这些情况下的行为正确,应采用特征集合以及大小类,并符合 IUIContentContainer
和 IUITraitEnvironment
接口。 有关详细信息,请参阅 Apple UITraitCollection 类参考和我们的统一情节提要简介指南。
此外,你不能再依赖设备屏幕边界来定义应用的可见区域,你需要改用应用的窗口边界。 由于窗口边界完全位于用户的控制之下,因此无法以编程方式调整它们或阻止用户更改这些边界。
最后,你的应用必须使用情节提要文件来展示其启动屏幕,而不是使用一组 .png 图像文件,并支持所有四个界面方向(纵向、反置纵向、横向向左和横向向右)以考虑在“侧拉窗口”面板或“拆分视图”模式下运行。
自定义硬件键盘快捷方式
在 iPad 上运行的 iOS 9 中,Apple 扩展了对硬件键盘的支持。 iPad 始终通过蓝牙包含基本的外部键盘支持,某些键盘制造商创建了包含硬有线 iOS 特定键的键盘。
现在,使用 iOS 9,应用可以创建自己的自定义键盘快捷方式。 此外,可以使用一些基本的键盘快捷方式,例如 Command-C(复制)、Command-X(剪切)、 Command-V(粘贴)和 Command-Shift-H(主页),而无需专门编写应用来响应它们。
Command-Tab 将启动一个应用切换器,该切换器允许用户从键盘快速切换应用,这与 Mac OS 非常类似:
如果 iOS 9 应用包含键盘快捷方式,用户可以按住 Command、Option 或 Control 键在弹出窗口中显示它们:
定义自定义键盘快捷方式
如果将以下代码添加到应用中的视图或视图控制器,当该视图或控制器可见时,自定义键盘快捷方式将可用:
#region Custom Keyboard Shortcut
public override bool CanBecomeFirstResponder {
get { return true; }
}
public override UIKeyCommand[] KeyCommands {
get {
var keyCommand = UIKeyCommand.Create (new NSString("n"), UIKeyModifierFlags.Command, new Selector ("NewEntry"), new NSString("New Entry"));
return new UIKeyCommand[]{ keyCommand };
}
}
[Export("NewEntry")]
public void NewEntry() {
// Add a new entry
...
}
#endregion
首先,我们重写 CanBecomeFirstResponder
属性并返回 true
,以便视图或视图控制器可以接收键盘输入。
接下来,我们将重写 KeyCommands
属性,并为 Command-N 击键创建新的 UIKeyCommand
。 激活击键时,我们将调用 NewEntry
方法(我们使用 Export
命令向 iOS 9 公开),以执行请求的操作。
如果我们在附加了硬件键盘的 iPad 上运行此应用,并且用户键入 Command-N,则会向列表中添加新条目。 如果用户按住 Command 键,将显示快捷方式列表:
资源管理注意事项
即使对于已使用 iOS 8 设计指南和最佳做法的应用,高效的资源管理也可能是个问题。 在 iOS 9 中,应用不再独占使用内存、CPU 或其他系统资源。
因此,必须微调 Xamarin.iOS 应用以有效使用系统资源,否则会在内存不足的情况下出现终止。 这同样适用于选择退出多任务的应用,因为第二个应用可能仍在“侧拉窗口”面板或“画中画”窗口中运行,这需要额外的资源,或者导致刷新率降至每秒 60 帧以下。
请考虑以下用户操作及其含义:
- 在“侧拉窗口”面板中输入文本 - 即使应用没有文本输入,系统键盘现在可以在其 UI 上显示。 因此,应用可能需要响应键盘显示通知(例如显示和隐藏键盘)。
- 在“侧拉窗口”面板中运行第二个应用 - 新应用现在在前台运行,并与现有应用竞争系统资源(如内存和 CPU 周期)。
- 在 PIP 窗口中播放视频 - 此窗口不仅遮挡应用的界面的一部分,而且启动视频的应用仍在后台运行,并且消耗 CPU 和内存资源。
若要确保应用有效使用资源,应执行以下操作:
- 使用 Instruments 分析应用 - 检查内存泄漏、过度 CPU 使用率以及应用可能阻止主线程的区域。
- 响应状态转换方法 - 在 AppDelegate.cs 文件中替代和对状态更改方法(如应用输入或从后台返回)的响应。 释放任何未获取的资产,如图像、数据或视图和视图控制器。
- 与内存密集型应用并行测试 - 使用物理 iOS 硬件上的“侧拉窗口”和“拆分视图”运行应用,并测试这两个应用是否保持响应且不会崩溃。
有关资源管理的详细信息,请参阅 Apple iOS 应用的节能指南。
选择退出多任务
虽然 Apple 建议所有 iOS 9 应用都支持多任务,但应用可能因具体原因而不支持多任务,例如需要全屏运行的游戏或相机应用。
要使 Xamarin.iOS 应用选择退出在“侧拉窗口”面板或“拆分视图”模式下运行,请编辑项目的 Info.plist 文件,并勾选需要全屏:
重要
虽然选择退出多任务会阻止应用在“侧拉窗口”或“拆分视图”中运行,但它不会阻止另一个应用在“侧拉窗口”或“画中画”视频中与你的应用一起显示。
禁用 PIP 视频播放
在大多数情况下,你的应用应允许用户播放它在图片浮动窗口中显示的任何视频内容。 但是,在某些情况下,可能不需要这种情况,例如游戏剪切场景视频。
若要选择退出 PIP 视频播放,请在应用中执行以下操作:
- 如果使用一个
AVPlayerViewController
显示视频,请将AllowsPictureInPicturePlayback
属性设置为false
。 - 如果使用
AVPlayerLayer
显示视频,请不要实例化AVPictureInPictureController
。 - 如果使用一个
WKWebView
显示视频,请将AllowsPictureInPictureMediaPlayback
属性设置为false
。
总结
本文介绍了确保 Xamarin.iOS 应用在 iOS 9 的新多任务功能 iPad 中正常运行所需的步骤。 此外,还介绍了对于不适合的应用选择退出多任务。