Xamarin.iOS 中的适用于 iPad 的多任务

iOS 9 支持使用幻灯片翻排或拆分视图同时运行的两个应用。 它还支持播放图片中的视频。

Split Screen ExamplePicture-in-Picture Example

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 仅)和 图片中的图片。 我们将在以下部分中更深入地了解这些功能。

幻灯片上方

“幻灯片翻排”功能允许用户选取第二个应用,并将其显示在小型滑动面板中,以提供快速交互。 “幻灯片翻排”面板是临时的,当用户返回到使用主应用时将关闭。

The Slide Over panel

要记住的主要事项是,用户决定哪些两个应用将并行运行,并且开发人员无法控制此过程。 因此,需要执行一些操作来确保 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)上,用户可以选取第二个应用,并在拆分屏幕模式下并行运行当前正在运行的应用。 用户可以通过拖动屏幕分隔线来控制每个应用占用的主屏幕的百分比。

The Split View

与幻灯片放映一样,用户决定哪些两个应用将并行运行,开发人员无法控制此过程。 因此,拆分视图对 Xamarin.iOS 应用提出了类似的要求:

  • 使用 Autolayout 和 Size 类 — 由于 Xamarin.iOS 应用现在可以在用户指定大小的拆分屏幕模式下运行,因此你不再依赖于设备、其屏幕大小或方向来布局 UI。 若要确保应用正确缩放其接口,需要使用“自动布局”和“大小类”。 有关详细信息,请参阅我们的 统一情节提要 简介文档。
  • 高效 使用资源 - 由于你的应用现在可以与其他正在运行的应用共享系统,因此你的应用有效地使用系统资源至关重要。 当内存变得稀疏时,系统会自动终止消耗最多内存的应用。 有关更多详细信息,请参阅 Apple 适用于 iOS 应用的 节能指南。

若要详细了解如何为拆分视图准备应用,请参阅 Apple 在 iPad 上采用多任务增强功能文档。

图片中的图片

新的图片图片功能(也称为 PIP)允许用户在小型浮动窗口中观看视频,用户可以将屏幕上的任意位置定位在其他正在运行的应用上方。

An example Picture in Picture floating window

与“幻灯片翻排”和“拆分视图”一样,用户完全控制在“图片”模式下观看视频。 如果应用的主要功能是观看视频,则需要进行一些修改才能在 PIP 模式下正常运行。 否则,无需更改即可支持 PIP。

要使应用能够按用户的请求显示 PIP 视频,需要使用 AVKitAV Foundation API。 媒体播放器框架已在 iOS 9 中弃用,不支持 PIP。

画中画仅适用于 iPad Pro、iPad Air、iPad Air 2、iPad Mini 2、iPad Mini 3 或 iPad Mini 4。 有关详细信息,请参阅“图片快速入门”文档中的 PictureInPicture 示例应用和 Apple 的图片。

在应用中支持多任务

对于任何现有的 Xamarin.iOS 应用,只要你的应用已经遵循 Apple 针对 iOS 8 的设计指南和最佳做法,支持多任务就是一项透明任务。 这意味着应用应将情节提要用于其用户界面布局的自动布局和大小类(有关详细信息,请参阅统 一情节提要 简介)。

对于这些应用,支持多任务并在其中运行良好,几乎不需要做任何更改。 如果你的应用的 UI 是使用其他方法创建的,例如直接定位和调整 C# 代码中的 UI 元素的大小,或者它依赖于特定的设备屏幕大小或方向,则需要进行重大修改才能正确支持 iOS 9 多任务。

若要在任何新的 Xamarin.iOS 应用中支持 iOS 9 多任务,请针对所有应用的用户界面布局再次使用情节提要和大小类,并实现以下部分中的说明。

屏幕大小和方向注意事项

在 iOS 9 之前,可以针对特定的设备屏幕大小和方向设计应用。 由于应用现在可以在“滑出”面板或拆分视图模式下运行,因此无论设备的物理方向或屏幕大小如何,它都可以发现自己在 iPad 上的紧凑或常规水平大小类中运行。

Screen Size and Orientation Considerations

在 iPad 上,全屏应用具有常规水平和垂直大小类。 所有 i电话,但 i电话 6 Plus 和 i电话 6s Plus,在任何方向上都有紧凑大小类。 i电话 6 Plus 和 i电话横向模式下的 6s Plus 具有常规水平大小类和紧凑垂直大小类(非常类似于 iPad Mini)。

在支持“幻灯片翻排”和“拆分视图”的 iPad 上,最终可以采用以下组合:

方向 主应用 辅助应用
纵向 屏幕的 75%
紧凑水平
常规垂直
屏幕的 25%
紧凑水平
常规垂直
横向 屏幕的 75%
常规水平
常规垂直
屏幕的 25%
紧凑水平
常规垂直
横向 屏幕的 50%
紧凑水平
常规垂直
屏幕的 50%
紧凑水平
常规垂直

在示例 MuliTask 应用中,如果在横向模式下的 iPad 上全屏运行,它将同时显示列表和详细信息视图:

The list and the detail view presented at the same time

如果同一应用在“幻灯片上”面板中运行,则会将其布局为紧凑水平大小类并仅显示列表:

Only the list presented when the device is horizontal

为了确保应用在这些情况下的行为正确,应采用特征集合以及大小类并符合 IUIContentContainerIUITraitEnvironment 接口。 有关详细信息,请参阅 Apple 的 UITraitCollection 类参考统一情节提要 指南简介。

此外,你不能再依赖设备屏幕边界来定义应用的可见区域,你需要改用应用的窗口边界。 由于窗口边界完全位于用户的控制之下,因此无法以编程方式调整它们或阻止用户更改这些边界。

最后,你的应用必须使用情节提要文件来展示其启动屏幕,而不是使用一组 .png 图像文件,并支持所有四个界面方向(纵向、倒排纵向、横向向左和横向向右)在幻灯片翻转面板或拆分视图模式下运行。

自定义硬件键盘快捷方式

在 iPad 上运行的 iOS 9 中,Apple 扩展了对硬件键盘的支持。 iPad 始终通过蓝牙包含基本的外部键盘支持,一些键盘制造商创建了包含硬有线 iOS 特定键的键盘。

现在,使用 iOS 9,应用可以创建自己的自定义键盘快捷方式。 此外,可以使用一些基本键盘快捷方式,如 Command-C (copy)、 Command-X (cut)、 Command-V (paste)和 Command-Shift-H (home),而无需专门编写应用来响应它们。

Command-Tab 将打开一个应用切换器,该切换器允许用户从键盘快速切换应用,这与 Mac OS 类似:

The app switcher

如果 iOS 9 应用包含键盘快捷方式,用户可以按住 命令选项控件 键以在弹出窗口中显示它们:

Screenshot shows the keyboard shortcuts for an app.

定义自定义键盘快捷方式

如果将以下代码添加到应用中的视图或视图控制器,当该视图或控制器可见时,自定义键盘快捷方式将可用:

#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 方法(我们使用命令向 iOS 9 Export 公开),以执行请求的操作。

如果我们在附加了硬件键盘的 iPad 上运行此应用,并且用户键入 Command-N,则会向列表中添加新条目。 如果用户按住 Command 键,将显示快捷方式列表:

Screenshot shows the New Entry shortcut for an app.

有关示例实现,请参阅示例 MultiTask 应用

资源管理注意事项

即使对于已使用 iOS 8 设计指南和最佳做法的应用,高效的资源管理也可能是个问题。 在 iOS 9 中,应用不再独占使用内存、CPU 或其他系统资源。

因此,必须微调 Xamarin.iOS 应用以有效使用系统资源,或者在内存不足的情况下面临终止。 这同样适用于选择退出多任务的应用,因为第二个应用可能仍在“幻灯片上”面板或图片窗口中运行,这需要额外的资源,或者导致刷新率降至每秒 60 帧以下。

请考虑以下用户操作及其含义:

  • 在“幻灯片翻排”面板中 输入文本 - 即使应用没有文本输入,系统键盘现在可以在其 UI 上显示。 因此,应用可能需要响应键盘显示通知(例如显示和隐藏键盘)。
  • 在“幻灯片上”面板中 运行第二个应用 - 新应用现在在前台运行,并与现有应用竞争系统资源,例如内存和 CPU 周期。
  • 在 PIP 窗口中 播放视频 - 此窗口不仅涵盖应用的界面的一部分,而且启动视频的应用仍在后台运行,并且消耗 CPU 和内存资源。

若要确保应用有效使用资源,应执行以下操作:

  • 使用 Instruments 分析应用 - 检查内存泄漏、过度 CPU 使用率和应用可能阻止主线程的区域。
  • 响应状态转换方法 - 在 AppDelegate.cs 文件中替代和响应状态更改方法,例如应用在后台输入或返回。 释放任何未获取的资产,如图像、数据或视图和视图控制器。
  • 与内存密集型应用并排测试 - 在物理 iOS 硬件上使用“滑出”和“拆分视图”运行应用,并使用内存密集型应用(如地图(在卫星视图模式下)运行应用,并测试这两个应用是否保持响应且不会崩溃。

有关资源管理的详细信息,请参阅适用于 iOS 应用的 Apple 节能指南。

选择退出多任务

虽然 Apple 建议所有 iOS 9 应用都支持多任务,但应用可能没有太多特定原因,例如需要全屏运行的游戏或相机应用。

若要使 Xamarin.iOS 应用选择退出在“幻灯片输出”面板或“拆分视图”模式下运行,请编辑项目的 Info.plist 文件并检查需要全屏

Opting Out of Multitasking

重要

虽然选择退出多任务会阻止应用在“幻灯片输出”或“拆分视图”中运行,但它不会阻止另一个应用在“幻灯片输出”或“图片中的图片”视频中与你的应用一起显示。

禁用 PIP 视频播放

在大多数情况下,你的应用应允许用户播放它在图片浮动窗口中显示的任何视频内容。 但是,在某些情况下,可能不需要这种情况,例如游戏剪切场景视频。

若要选择退出 PIP 视频播放,请在应用中执行以下操作:

  • 如果使用 a AVPlayerViewController 来显示视频,请将 AllowsPictureInPicturePlayback 属性设置为 false.
  • 如果使用 AVPlayerLayer 显示视频,请不要实例化 AVPictureInPictureController
  • 如果使用 a WKWebView 来显示视频,请将 AllowsPictureInPictureMediaPlayback 属性设置为 false.

总结

本文介绍了确保 Xamarin.iOS 应用在 iOS 9 的新多任务功能 iPad 中正常运行所需的步骤。 此外,还介绍了对于不适合的应用选择退出多任务。