其他 iOS 9 框架更改

本文介绍对 iOS 9 现有框架的其他细微更改或增强

iOS 9 徽标

除了对 iOS 的重大更改外,Apple 还对 iOS 9 中的多个现有框架进行了修改和改进。

AVFoundation 框架新增内容

在 AVFoundation 框架中,AVSpeechSynthesisVoice 类现在让你可以在语言外通过标识符指定声音。

例如,以下代码会获取所有可用声音的列表:

var voices = AVSpeechSynthesisVoice.GetSpeechVoices ();

然后,你可以使用列表中的某个语音,方法是将其设置为 AVSpeachUtterance 类的实例的 Voice 属性。

AVQueuePlayer 类现在支持队列中有 Internet 流式处理和基于文件的媒体的混合。 以前的版本只允许排队同一类型的媒体。

有关详细信息,请参阅 Apple 的 AVSpeechSynthesisVoice 参考

AVKit 框架新增内容

为了配合新的画中画 (PIP) 功能,AVKit 框架包含了新的 AVPictureInPictureControllerAVPlayerViewController 类:

  • AVPictureInPictureController - 此类允许 iOS 9 应用响应用户在 iPad 上的浮动可调整大小的 PIP 窗口中启动视频播放。
  • AVPlayerViewController - 管理用于在 iPad 上的浮动、可调整大小的 PIP 窗口中显示视频的 AVPlayer 控制器。

有关详细信息,请参阅我们的 iPad 多任务文档以及 Apple 的 AVPictureInPictureController 参考AVPlayerViewController 参考

CloudKit Web 服务简介

CloudKit 框架简化了访问 iCloud 的应用程序的开发。 这包括检索应用程序数据和资产权限,以及安全存储应用程序信息的能力。 此工具包允许用户使用 iCloud ID 访问应用程序而不共享个人信息,从而为用户提供匿名层。

新的 CloudKit Web 服务框架提供了一个 JavaScript 库 (CloudKit JS),该库可以合并到你的网站中,以提供对与你的 Xamarin.iOS 应用相同的基于 CloudKit 的数据和内容的访问。

重要

在你使用 CloudKit JS 从 CloudKit 数据库访问、呈现或更新内容之前,必须先定义该数据库的架构。

有关详细信息,请参阅以下文档:

重要

Apple 提供工具,用于帮助开发人员正确处理欧盟一般数据保护条例 (GDPR)。

Foundation 框架新增内容

Apple 在 iOS 9 中加入了对 Foundation 框架的以下更改:

对 NSBundle 的更改

为 iOS 9 对 NSBundle 类进行了以下更改:

  • GetPreservationPriorityForTag (NSString tag) - 获取具有给定标记的资源的当前保留优先级。 有效值的范围在 0.01.0 之间,首先清除优先级最低的资源。
  • SetPreservationPriorityForTag (double priority, NSSet tags) - 使用给定标记设置资源的当前保留优先级。 有效值的范围在 0.01.0 之间,首先清除优先级最低的资源。

有关详细信息,请参阅 Apple 的 NSBundle 参考

对 NSProcessInfo 的更改

在 iOS 设备上运行的每个进程都有一个进程信息代理 (PIA)。 使用 NSProcessInfo 类提供有关当前 PIA 的信息,并控制给定进程的功率和热管理。

例如,若要控制进程的自动终止,可以使用以下代码:

// Disable automatic termination
var activity = NSProcessInfo.ProcessInfo.BeginActivity(NSActivityOptions.AutomaticTerminationDisabled, "Define reason for change here...");

// Perform the required task
...

// Return to normal operation
NSProcessInfo.ProcessInfo.EndActivity(activity);

有关详细信息,请参阅 Apple 的 NSProcessInfo 参考

响应低功率模式

使用 NSProcessInfo 类的 LowPowerModeEnabled 属性来确定正在运行应用的 iOS 设备上是否启用了低功率模式。 例如:

// Is the device in low power mode?
if (NSProcessInfo.ProcessInfo.LowPowerModeEnabled) {
    // Reduce activity to conserve energy...
} else {
    // Return to normal activity...
}

HealthKit 框架更改

Apple 在 iOS 9 中包含了对 HealthKit 框架的以下更改:

  • 支持批量删除和删除对 HealthKit 数据库中的条目的跟踪。 有关详细信息,请参阅 Apple 的 HKDeletedObjectHKAnchoredObjectQueryHKHealthStore 类参考
  • 新的跟踪类别和特征已添加到 HKQuantityTypeIdentifier 类(如 UVExposure)和 HKCategoryTypeIdentifier 类(如 OvulationTestResult)。

有关在 Xamarin.iOS 中使用 HealthKit 的详细信息,请参阅我们的 HealthKit 简介文档。

本地身份验证框架更改

Apple 在 iOS 9 中包含了对本地身份验证框架的以下更改:

  • 使用 LAContext 类的 EvaluateAccessControlEvaluatePolicy 方法时,现在可以重复使用先前成功解锁尝试中的 Touch ID 匹配项。
  • 获取当前注册的指纹的列表的功能。
  • 支持在身份验证中添加或移除指纹时进行跟踪。
  • 在 Keychain 调用中使用身份验证上下文,并支持评估 Keychain 访问控制列表。
  • 从代码中取消用户提示的功能。

有关详细信息,请参阅 Xamarin.iOS 的 Touch ID 和 Face ID

LAContext 更改

为 iOS 9 对 LAContext 类进行了以下更改:

  • TouchIdAuthenticationMaximumAllowableReuseDuration - 返回可以重复使用 Touch ID 身份验证的时间上限。
  • EvaluatedPolicyDomainState - 获取或设置评估的策略的状态。
  • MaxBiometryFailures - 已在 iOS 9 中弃用。
  • TouchIdAuthenticationAllowableReuseDuration 获取或设置可以重复使用 Touch ID 身份验证的时间量。
  • EvaluateAccessControl - 异步评估身份验证策略。
  • Invalidate - 使给定的 Touch ID 身份验证失效。
  • IsCredentialSet - 如果当前已设置凭据,则返回 true
  • SetCredentialType 设置给定的凭据类型。

有关更多详细信息,请参阅 Apple 的 LAContext 参考

MapKit 框架更改

Apple 在 iOS 9 中包含了对 MapKit 框架的以下更改:

  • MapKit 现在通过 MKLaunchOptionsMKDirections 类支持将地图应用直接启动到公交方向,以及查询公交预计到达时间 (ETA)。
  • MapKit 和 CLGeocoder 类返回的搜索结果还可以提供结果的时区。
  • 现在,可以使用 MKAnnotationView 类的 DetailCalloutAccessoryView 属性完全自定义你的 iOS 应用呈现的地图注释。

有关在 Xamarin.iOS 中使用地图和注释的更多信息,请参阅我们的 iOS 地图演练 - 探索 MapKit 中的注释和覆盖文档,另请参阅 Apple 的 CLGeocoder 参考以了解更多信息。

PassKit 框架新增内容

Apple 在 iOS 9 中包含了对 PassKit 框架的以下更改:

  • Apple Pay 现在支持商店借记卡、信用卡和 Discover 卡。 有关详细信息,请参阅 Apple 的 PKPaymentRequest 类参考的“支付网络”部分。
  • 现在可以从 Xamarin.iOS 应用中直接将支付网络和卡颁发者添加到 Apple Pay。 有关更多详细信息,请参阅 Apple 的 PKAddPaymentPassViewController 类参考

有关在 Xamarin.iOS 中使用 PassKit 的详细信息,请参阅 PassKit 简介文档。

Safari Services 框架新增内容

Apple 在 iOS 9 中包含了对 Safari Services 框架的以下更改:

  • 现在可以使用新的 SFSafariViewController 类在 Xamarin.iOS 应用中显示 Web 内容。 它提供与 Safari 应用共享网站数据和 Cookie 的功能,并包含多个 Safari 功能(如阅读器和自动填充)。 SFSafariViewController 提供一个完成按钮,用于在用户完成查看 Web 内容后将用户返回到你的应用。

由于 SFSafariViewController 类是为显示 Web 内容的单个页面而定制的,因此你应考虑使用它来替换你的现有 Xamarin.iOS 应用中的任何 WKWebKitUIWebView 控件。

显示网站

下面的代码是从另一个视图控制器内部调用 SFSafariViewController 的示例:

// Create an instance of the Safari Services View Controller
var controller = new SFSafariViewController(new NSUrl("http://www.xamarin.com"));

// Display website
PresentViewController(controller, true, null);

UIKit 框架更改

Apple 为 iOS 9 加入了对 UIKit 框架的多个元素的许多增强。 以下部分将详细介绍这些更改。

3D Touch 事件

3D Touch 是 iOS 9 以及 iPhone 6s 和 iPhone 6s Plus 的新增功能,为 iOS 应用添加了压力敏感手势。 因此,如果你的应用在 iOS 9(或更高版本)上运行,并且 iOS 设备能够支持 3D Touch,则压力的变化将导致引发 TouchesMoved 事件。

由于这种行为更改,你的 iOS 应用应为更频繁地调用 TouchesMoved 事件做好准备,即使 X/Y 坐标未更改也是如此。

有关详细信息,请参阅我们的 3D Touch 简介指南。

文档就地打开功能

通过使用 UIApplicationDelegate 类的 FinishedLaunching (application, launchOptions)WillFinishLaunching (Application, launchOptions) 方法,现在可以打开文档并就地修改它(而不是对副本进行处理)。

若要支持新的就地打开功能,请将 LSSupportsOpeningDocumentsInPlace 键添加到你的 Xamarin.iOS 应用的 Info.plist 文件中,其值为 YES

有关更多详细信息,请参阅 Apple 的 UIApplicationDelegate 参考

增强的触控事件

Apple 在 iOS 9 中为触控事件提供了多项增强。 其中包括使用触控预测并在显示刷新之间获取中间触控的功能。

有关更多详细信息,请参阅 Apple 的 iOS 事件处理指南

提取定制内容

新的 NSDataAsset 类允许 Xamarin.iOS 应用提取为当前正在运行它的 iOS 设备的内存和图形功能定制的内容。

新布局定位点

新的 NSLayoutAnchorNSLayoutDimension 布局定位点类使用 UIView 类的新定位点属性(如 LeadingAnchorWidthAnchor)以使 iOS 9 中的布局更加容易。

请参阅我们的 Unified Storyboard 文档,详细了解如何在 Xamarin.iOS 应用中使用 AutoLayout 和 Size 类,另请参阅 Apple 的 NSLayoutAnchor 参考NSLayoutDimension 参考UIView 参考以了解详细信息。

新的可读内容边距

新的 UILayoutGuide 类可用于提供可读内容边距,并为视图中的内容定义绘图区域。 有关详细信息,请参阅 Apple 的 UILayoutGuide 参考

通知修改中的文本输入

UIUserNotificationAction 类具有一个新的 Behavior 属性,可用于支持来自通知的文本输入。

UIApplicationDelegate 更改

虽然 Apple 未正式弃用,但他们建议将对 UIApplicationDelegate 类的 FinishedLaunching (UIApplication application) 方法的所有调用替换为 FinishedLaunching (UIApplication application, NSDictionary launchOptions)WillFinishLaunching (UIApplication application, NSDictionary launchOptions) 方法。

有关更多详细信息,请参阅 Apple 的 UIApplicationDelegate 参考

UIKit Dynamics 更改

Apple 在 iOS 9 中对 UIKit Dynamics 进行了以下更改:

  • Dynamics 现在支持非矩形碰撞边界。
  • 新的可自定义的 UIFieldBehavior 类用于支持各种字段类型。
  • 其他附件类型已添加到 UIAttachmentBehavior 类。

有关更多详细信息,请参阅 Apple 的 UIAttachment 参考

UIPickerView 和 UIDatePicker 更改

在 iOS 9 之前,UIPickerViewUIDatePicker 控件不可调整大小的,并且会自动调整大小以填充其容器的宽度(通常是正在运行应用的 iOS 设备的宽度)。

在 iOS 9 中,此自动大小调整不再发生,并且无论屏幕大小和方向如何,控件都将在所有 iOS 设备上以 320 点的宽度呈现。

若要更正这种情况,请使用 Auto Layout 和 Size 类将控件的宽度固定到父容器(视图)的边缘,并指定所需的高度。 有关在 Xamarin.iOS 应用中使用 Auto Layout 和 Size 类的详细信息,请参阅 Unified Storyboards 简介文档。

新的 UITextInputAssistantItem 类

使用新的 UITextInputAssistantItem 类在快捷栏中布局栏按钮组。 快捷栏是一个在软键盘中可用的新区域,用于提供键入快捷方式。