大多数浏览器和
Developer App 均支持流媒体播放。
-
小组件编程临摹课程 3:加速时间线
我们开始学习小组件编程临摹课程第三部分,也最后一个部分,提升你的小组件水平。学习第 2 部分你没跟上的部分,或从第 3 部分的入门项目开始,加快学习速度。我们将探讨小组件、时间线和配置的高阶概念。了解如何加载进程内和后台 URL,以及如何直接链接到 app 内容,并了解如何创建能探索 app 中的各种功能的多重小组件,以及如何让小组件能够动态配置。 获取更多信息从而创建出色的小组件,请观看“为小组件构建 SwiftUI 视图”。
资源
相关视频
WWDC20
-
下载
(你好 WWDC 2020) 你好 欢迎来到全球开发者大会
(“边看边写”小组件 3) 你好 我是 Izzy 我是 iOS 系统体验组的工程师 这是小组件边看边写系列的最后一篇介绍 我们将介绍 如何从小组件扩展中使用 URL 会话 你应该很熟悉它 但其中有一些是仅适用于小组件的新 API 我们将使用 SwiftUI 的 Link API 来使小组件的区域可以被轻点 我们将添加一个小组件包 我们可以在同一扩展中提供多种小组件 超级方便 我们将研究如何提供一组动态选项 用于小组件配置 这是个关于“边看边写”的介绍 我们从小组件边看边写介绍 上次结束的地方继续进行 所以如果你一直在关注的话 你就来对地方了 如果没有 也不用担心 你可以从示例项目的第三部分目标开始 由于这次介绍我们涉及的主题很多 所以我为我们列了一个清单
我们从第三部分开始 让我们开始吧 (推进时间表)
我提前在这个项目中添加了 另一个小组件 它叫 Leaderboard 小组件 一起来看看吧
我们可以看到它给我们提供了一个 按健康状况排序的角色列表 先说说它是怎么做的吧 发出网络请求 是小组件获取数据的基本方式之一 你可能已经注意到 但时间轴提供者的 API 是由完成处理程序而不是返回值构建的 特别是为了让做异步任务 如网络获取 变得简单 在这里 我们对我们的 CharacterDetail 对象 有一个 加载 LeaderboardData 的异步请求 让我们来看看实现的情况
你会注意到 这是发出常规数据任务请求的 常规 URL 会话
我们使用本地文件模拟远程获取 但通常在这里调用远程网络服务 需要注意的关键是 这是正常的进程内 URL 会话 API 它的工作原理与你预期的完全相同 但后台会话如何呢?
你可能熟悉其他扩展类型 其中后台 URL 会话将在扩展完成时 启动它的托管 app 但对于小组件来说 情况并非如此 小组件会响应它创建的所有 URL 会话 包括后台会话 但这里没有 app 提供委托服务 那么小组件如何知道要做什么呢?
在小组件配置上有一个修饰符称为 onBackgroundURLSessionEvents 它类似于 app 委托方法
为你提供了会话标识符
和一个完成块
你会像在 app 中一样管理它们 这就是 URL 会话
让我们将排行榜小组件添加到主屏幕
这非常棒 但就像 Character Detail 小组件一样 我希望能够轻点每个角色 来启动他们的特定细节屏幕 就像小组件 URL一样 这非常简单 我们所要做的 就是使用 SwiftUI Link API
我们的排行榜小组件 使用了这个全字符视图
我们来看看它的定义
我可以通过单击这个 HStack 和在 SwiftUI 预览中 反射的蓝色轮廓看到 我的行就是这个 HStack 我们所要做的就是将它嵌入到一个
带有角色 URL 目的地的链接中
现在让我们构建并运行
(构建成功)
现在 当我点击我的小组件时
可以看到它高亮显示了特定的行 当我点击时 我直接跳转到了那个角色的信息 那个是 Spouty 现在这个是 Egghead
这就是对链接的使用
你可能已经注意到 当我打开小组件库时 我只有一个排行榜小组件 这是因为我将主属性 从 Ranger Detail 小组件 移到了排行榜小组件上
根据定义 每个进程只能有一个主进程 所以我们不能在两个地方都添加它 但我们能做的是创建一个小组件捆绑
因此 我们所要做的就是 将两个小组件添加到小组件包中 并将主要属性从排行榜小组件
移动到包中 现在 当我构建并运行…
小组件库时
我同时拥有了我的排行榜小组件 和 Ranger Detail 小组件 非常棒
这就是小组件包
在上一节中 我们使用硬编码的列表 对小组件进行了配置 但如果 我们事先不知道所有的选项会怎样呢? 因为我们的配置是一个 SiriKit 意图 所以我们可以提供一个 带有意图扩展的动态选项列表 就像我们 为其他基于意图的特性所做的那样
我已经在这个项目中添加了扩展 但你要这样做 首先打开文件 新建 目标…
搜索“意图”
并添加一个意图扩展
选择 Swift 作为语言 确保你的初始选项是“无” 你要做的就是这些
现在让我们看看意图的定义 它看起来与我们之前的静态意图非常相似 但是“类型”现在是一个自定义类型 而不是枚举 让我们看看它有什么特性
它有两个属性:标识符和显示字符串 这些是自定义意图类型的默认属性 但是现在 这些值从哪里来呢?
它们来自意图处理程序 这里是我们提供动态选项集的地方 注意 这是一个异步调用 就像我们的时间线方法一样 我们已经返回了默认的字符集 但是 CharacterDetail 也有一个远程字符列表 所以让我们在这里添加它
这就像从网络中获取更多信息一样 现在让我们更新小组件以使用动态意图
我们可以在范围内编辑角色选择意图
因为我们不再有枚举值 所以我们不再需要这个方法
我们选择的角色是来自名字的角色
名字是意图标识符
让我们看看它是什么样的
现在 当我去配置我的 Character Detail 小组件
我有我们初始的选项 Power Panda、Egghead 和 Spouty 但你可以看到我们还拥有 Mr. Spook、Cake 和 Octo 所以 Cake
好吧 但是 我想观察 Mr. Spook 我把它放到主屏幕上
现在我们有一个使用 URL 会话的小组件 使用新的 SwiftUI 链接 API 包含了两种小组件 并且支持动态配置 (下一步) 有关如何构建优秀小组件的设计观点 请参见“设计优秀的小组件”的演讲 至于如何在 SwiftUI 中 应用这些设计指南 请参见“为小组件构建 SwiftUI 视图” 这两篇演讲都来自今年的全球开发者大会 非常感谢你的收看 现在你已经拥有了 构建出色小组件所需的所有工具 我迫不及待地想看到你的作品了
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。