其他 iOS 9 框架更改
本文介绍对 iOS 9 现有框架的其他细微更改或增强。
除了对 iOS 的重大更改外,Apple 还对 iOS 9 中的多个现有框架进行了修改和改进。
AVFoundation 框架新增内容
在 AVFoundation 框架中,AVSpeechSynthesisVoice 类现在让你可以在语言外通过标识符指定声音。
例如,以下代码会获取所有可用声音的列表:
var voices = AVSpeechSynthesisVoice.GetSpeechVoices ();
然后,你可以使用列表中的某个语音,方法是将其设置为 AVSpeachUtterance 类的实例的 Voice
属性。
AVQueuePlayer 类现在支持队列中有 Internet 流式处理和基于文件的媒体的混合。 以前的版本只允许排队同一类型的媒体。
有关详细信息,请参阅 Apple 的 AVSpeechSynthesisVoice 参考。
AVKit 框架新增内容
为了配合新的画中画 (PIP) 功能,AVKit 框架包含了新的 AVPictureInPictureController
和 AVPlayerViewController 类:
- 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 数据库访问、呈现或更新内容之前,必须先定义该数据库的架构。
有关详细信息,请参阅以下文档:
- CloudKit 简介 - 我们对在 Xamarin.iOS 应用中使用 CloudKit 的简介。
- CloudKit 快速入门 - Apple 对 CloudKit 的简介。
- CloudKit JS 参考 - Apple 的 CloudKit JS 文档。
- CloudKit 目录:CloudKit 简介(Cocoa 和 JavaScript) - Apple 使用 CloudKit 和 CloudKit JS 的示例应用。
重要
Apple 提供工具,用于帮助开发人员正确处理欧盟一般数据保护条例 (GDPR)。
Foundation 框架新增内容
Apple 在 iOS 9 中加入了对 Foundation 框架的以下更改:
对 NSBundle 的更改
为 iOS 9 对 NSBundle 类进行了以下更改:
GetPreservationPriorityForTag (NSString tag)
- 获取具有给定标记的资源的当前保留优先级。 有效值的范围在0.0
到1.0
之间,首先清除优先级最低的资源。SetPreservationPriorityForTag (double priority, NSSet tags)
- 使用给定标记设置资源的当前保留优先级。 有效值的范围在0.0
到1.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 的 HKDeletedObject、HKAnchoredObjectQuery 和 HKHealthStore 类参考。
- 新的跟踪类别和特征已添加到
HKQuantityTypeIdentifier
类(如UVExposure
)和HKCategoryTypeIdentifier
类(如OvulationTestResult
)。
有关在 Xamarin.iOS 中使用 HealthKit 的详细信息,请参阅我们的 HealthKit 简介文档。
本地身份验证框架更改
Apple 在 iOS 9 中包含了对本地身份验证框架的以下更改:
- 使用 LAContext 类的
EvaluateAccessControl
和EvaluatePolicy
方法时,现在可以重复使用先前成功解锁尝试中的 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 现在通过 MKLaunchOptions 和 MKDirections 类支持将地图应用直接启动到公交方向,以及查询公交预计到达时间 (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 应用中的任何 WKWebKit 或 UIWebView 控件。
显示网站
下面的代码是从另一个视图控制器内部调用 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 设备的内存和图形功能定制的内容。
新布局定位点
新的 NSLayoutAnchor
和 NSLayoutDimension
布局定位点类使用 UIView 类的新定位点属性(如 LeadingAnchor
和 WidthAnchor
)以使 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 之前,UIPickerView 和 UIDatePicker 控件不可调整大小的,并且会自动调整大小以填充其容器的宽度(通常是正在运行应用的 iOS 设备的宽度)。
在 iOS 9 中,此自动大小调整不再发生,并且无论屏幕大小和方向如何,控件都将在所有 iOS 设备上以 320 点的宽度呈现。
若要更正这种情况,请使用 Auto Layout 和 Size 类将控件的宽度固定到父容器(视图)的边缘,并指定所需的高度。 有关在 Xamarin.iOS 应用中使用 Auto Layout 和 Size 类的详细信息,请参阅 Unified Storyboards 简介文档。
新的 UITextInputAssistantItem 类
使用新的 UITextInputAssistantItem
类在快捷栏中布局栏按钮组。 快捷栏是一个在软键盘中可用的新区域,用于提供键入快捷方式。