WidgetKit
概览
利用 WidgetKit,你可以构建一个生态系统来支持一目了然且及时更新的体验,从而能够在 App 之外的场景中提供 App 内容,并使 App 的内容和功能扩展到设备上的更多位置。
WidgetKit 所支持的生态系统包括以下组成部分:
- 小组件
-
小组件从 App 提取及时且与个人相关的少量信息,将其显示在用户一眼就能看到的地方,并在不启动 App 的情况下提供特定的 App 功能。在 iPhone 和 iPad 上,用户可以将小组件放在今天视图、主屏幕和锁定屏幕。在 Mac 上,用户可以将原生 Mac App 小组件放在桌面和通知中心。从 iOS 17 和 macOS 14 开始,用户还可以将 iPhone 小组件放在 Mac 桌面和通知中心。在 Apple Watch 上,小组件显示在智能叠放中。
- 智能叠放
-
在 iPhone 上,用户可以叠放小组件并创建智能叠放。在智能叠放中,WidgetKit 利用设备端智能技术以及 App Intents 框架提供的功能来实现智能轮换。智能轮换会根据用户的当前情况,将相应的小组件显示在叠放的最上层。在 Apple Watch 上,用户将小组件放在智能叠放中,并可将小组件固定到固定位置,或让系统根据用户情况进行排序。
- Watch 复杂功能
-
用户可以将 Watch 复杂功能放在 Apple Watch 表盘中,只需抬起手腕便可查看及时、相关的信息。此外,Apple Watch 上的智能叠放最多可容纳 3 个复杂功能。
- 实时活动
-
实时活动可在锁定屏幕或灵动岛中显示 App 的最新内容,例如活动和任务信息。实时活动使用 ActivityKit 获取更新,还可以选择使用 Apple 推送通知服务 (APNs) 来发送 ActivityKit 推送通知。如需了解更多信息,请参阅 ActivityKit。
- 控制
-
控制可让用户通过控制中心、锁定屏幕和操作按钮完成 App 中的操作。你可以创建按钮或开关形式的控制。例如,按钮可以执行 App 中的操作或打开 App 中的特定视图,开关可以开关灯或者开关车库门。
注释
visionOS 不会载入兼容的 iPad 和 iPhone App 中的 WidgetKit 扩展。
以迭代方式开发一目了然的功能
WidgetKit 可在 iPad、iPhone、Mac 和 Apple Watch 中启用各种功能,但只会以最符合用户设备和个人需求的方式启用。例如,WidgetKit 在所有平台上支持各种尺寸的小组件。它还支持仅在 iPhone 和 iPad 上可用的实时活动、控制和功能。
尽管 WidgetKit 支持的每项功能并非在每个平台或设备上都可用,但小组件、实时活动、控制和 Watch 复杂功能在技术和设计有许多相似之处。因此开发者可以轻松地同时开发各种功能并扩展使用场景。
使用迭代方法并从支持一项功能或部分尺寸的小组件入手。例如,首先创建一个小尺寸的小组件 (参照创建小组件扩展),但从一开始就计划和设计适合多种平台的其他尺寸和功能。然后使用户能够在尽可能多的场景中查看你的内容。如需了解更多信息,请参阅制定 WidgetKit 策略。
了解交互和个性化
WidgetKit 生态系统使用户能够在新场景中查看 App 内容,并可随时随地根据需要与 App 进行特定的交互:
-
用户轻点小组件、Watch 复杂功能或实时活动即可启动相应的 App 或带有相匹配信息或功能的 App 场景。例如,轻点 Emoji Ranger 小组件或 Watch 复杂功能会启动与显示的角色匹配的 App 场景。
-
用户可以使用小组件、控制和实时活动中的按钮和开关与 App 交互,而无需启动 App。例如,Emoji Rangers:支持实时活动、交互和动画 示例代码项目的大尺寸小组件包含一个按钮,用户轻点该按钮可临时增强角色的疗愈能力。
除了提供一目了然的相关信息和特定交互操作,用户还可使用小组件、Watch 复杂功能、实时活动和控制来对设备进行个性化设置:
-
用户可以配置小组件和 Watch 复杂功能,以展示自己需要的详细信息。例如,Emoji Rangers:支持实时活动、交互操作和动画 示例代码项目的小组件允许用户配置小组件中显示的角色。
-
用户可以按照最适合自己的方式排列小组件和 Watch 复杂功能。当用户在 iPhone 或 iPad 中叠放小组件并启用“智能轮换”时,WidgetKit 会自动将最相关的小组件轮换显示在最上层,确保用户在最恰当的时间看到最重要的详情。在 Apple Watch 上,智能叠放会显示默认小组件,用户也可以将小组件放在智能叠放中的固定位置。
使用时间线更新内容
小组件和 Watch 复杂功能使用一种特殊的机制来更新其内容:你创建一个数据更新时间线并将其传递给 WidgetKit。然后 WidgetKit 会以节能的方式确保小组件或复杂功能更新其内容。有关时间线的更多信息,请参阅让小组件保持最新状态。
实时活动不使用时间线来更新内容,而是使用 ActivityKit 和 Apple 推送通知服务 (APNs) 来发送 ActivityKit 推送通知。如需了解更多信息,请参阅 ActivityKit。
控制不使用时间线来更新内容。当用户使用控制、App 重新加载控制,或系统从 Apple 推送通知服务 (APNs) 收到远程推送通知时,控制会更新其内容。
创建简洁明了的设计
小组件、Watch 复杂功能、实时活动和控制的尺寸都很小,需要设计得清晰明确、一目了然。有关设计方面的指导,请参阅《人机界面指南》> 小组件、《人机界面指南》> 复杂功能、《人机界面指南》> 实时活动以及《人机界面指南》> 控制。
相关主题
@MainActor @preconcurrency protocol Widget
@MainActor @preconcurrency protocol WidgetBundle
struct StaticConfiguration
enum WidgetFamily
struct WidgetRenderingMode
struct WidgetAccentedRenderingMode
强调
模式的小组件中显示的 Image
的渲染模式。struct AccessoryWidgetBackground
struct WidgetLocation
struct AppIntentConfiguration
struct WidgetInfo
struct AppIntentRecommendation
struct IntentConfiguration
struct IntentRecommendation
protocol TimelineProvider
protocol IntentTimelineProvider
struct TimelineProviderContext
protocol TimelineEntry
struct Timeline
class WidgetCenter
protocol AppIntentTimelineProvider
struct TimelineEntryRelevance
struct WidgetPreviewContext
struct ActivityConfiguration
struct DynamicIsland
let NSUserActivityTypeLiveActivity : String
enum ActivityPreviewViewKind
enum ActivityFamily
struct ControlWidgetToggle
struct ControlWidgetButton
class ControlCenter
protocol ControlValueProvider
protocol AppIntentControlValueProvider
struct StaticControlConfiguration
struct AppIntentControlConfiguration
struct ControlInfo
protocol ControlPushHandler
struct ControlPushInfo
struct AccessoryWidgetGroup
struct ControlWidgetButtonDefaultActionLabel
ControlWidgetButton
指定操作标签,则该视图表示默认操作标签。struct ControlWidgetToggleDefaultLabel
ControlWidgetToggle
指定标签,则该视图表示默认标签。struct WidgetRelevance
struct WidgetRelevanceAttribute
macro Preview<Widget, Provider>(String?, as: WidgetFamily , using: Provider.Intent, widget: () -> Widget, timelineProvider : () -> Provider)
macro Preview<Widget, Provider>(String?, as: WidgetFamily , using: Provider.Intent, widget: () -> Widget, timelineProvider : () -> Provider)