大多数浏览器和
Developer App 均支持流媒体播放。
-
在 SwiftUI 中创建复杂功能
使用 SwiftUI 在 Apple Watch 上增加图形复杂功能。我们将教你如何在 Meridian 和图文这种表盘的复杂功能上使用自定义 SwiftUI 视图,查看创建复杂功能的最佳方法,我们还将演示在 Xcode 12 中的成果预览。 要想充分利用本节内容,建议你先熟悉 SwiftUI 以及如何在 Apple Watch 上创建复杂功能等基础知识。获取相关信息,请查看“为 Apple Watch 创建复杂功能”并阅读“使用 SwiftUI 构建 watchOS App 界面”。 了解如何在 SwiftUI 构建图形复杂功能后,结合 watchOS 7 的其他功能(如多重复杂功能和表盘共享)来为喜欢你 app 的用户创建充满个性和定制化的表盘。
资源
相关视频
WWDC22
WWDC21
WWDC20
-
下载
(你好 WWDC 2020) (你们好 欢迎参加 WWDC) 大家好 我是 Matthew Koonce watchOS SwiftUI 工程师 (工程师 MATTHEW KOONCE 工程师 AUGUST JOKI) 稍后我的同事 August 会和大家见面 今天我们为大家详细介绍如何打造 出色的 SwiftUI 复杂功能 复杂功能是指如何 在表盘上显示关于 app 的 及时和相关信息 一些功能最强大、最实用的复杂功能 可以从复杂信息中提炼出 一眼就能明白的信息 例如 UVI 复杂功能 是垂直测量显示 加上颜色渐变 因此 我很快就知道今天应该涂防晒霜
要构建类似 UVI 图表的复杂功能不简单 不过 有了 SwiftUI 复杂功能 你可以 将自己的 SwiftUI 知识运用到表盘 当然 没有 Xcode 预览 我们也不能构建 SwiftUI 复杂功能 现在你可以同时 在不同的表盘上预览复杂功能 今天 我们将介绍如何 在 SwiftUI 中构建你的复杂功能 为此 我们会了解 ClockKit 和 SwiftUI 中 全新的 API 以实现上述目的
此外 我们会讲解 SwiftUI 视图 如何适应表盘着色 以及一些最佳做法 首先我们介绍 API
为在复杂功能中使用 SwiftUI 视图 我们使用可靠的复杂功能模板 ClockKit 有几十个预定义模板 为复杂功能提供简单易用的布局 作为 watchOS 7 的新特性 我们添加了模板使 SwiftUI 视图 和其他 ClockKit 提供器在一起 这些模板是关于“图形拐角” “圆形”、“矩形”
以及“特大号”所有分类的 但 SwiftUI 真正厉害的地方在于 只用单个 SwiftUI 视图的模板 这些模板提供完整的画布 用于绘制每一个分类
“图形矩形全视图”模板 是一个全新的模板 你可以在更大的画布上绘制
有了这一画布 你可以使用 SwiftUI 做任何事情 SwiftUI 强大的绘制资料库任你使用 你可以为复杂功能轻松创建新颖设计 比如 Dawn Patrol app 的 这个酷炫潮汐图
以上是关于如何 把 SwiftUI 视图融入 ClockKit 模板 同时 我们在 SwiftUI 中做了调整 使复杂功能更强大、灵活性更强 (你好 WWDC) 首先 我们来讲下文本 我们更新了文本 让它知道显示在哪一个复杂功能分类上 默认字体大小因不同的分类而异 例如 这里显示的范例文本 是“图形矩形”复杂功能的 它的字体 在 Extra Large 表盘上会大很多 默认字体也随之改为了 SF Rounded 几乎占据了整个表盘
此外 文本有新的日期格式器 在表盘上效果很好 特别是 relative offset 和 timer 风格 会由表盘自动更新 (倒计时 午睡时间 2 小时 46 分钟) 例如 为该日期使用 relative 风格 能确保它相对现在始终是准确的
timer 风格也是这样 我可以把日期放在内插字符串中 它会自动显示 Sourdough 计时器的剩余时间
以上是我们在文本方面的改进 接下来 我们看下两个受欢迎的控件 它们属于复杂功能 被带到了 SwiftUI 它们是“进度视图”和“量规” (进度视图和量规) “进度视图”和“量规”都超级实用 有各自的具体功能
“进度视图”非常适合 以线性方式前进的信息 比如音乐 而“量规”则非常适合 随时间而变化的信息 比如温度 我们先来看“进度视图”
最简单的设置中 “进度视图”只有一个值 可以进行风格设置
这里 我们使用的是“圆形”风格
我们也可以为“进度视图” 添加一个标签来描述它的功能 这里我们使用音符 SF 符号
最后 “进度视图”可以着色 完成音乐“进度视图”的构建
“进度视图”也有线性风格 所有相同的 API 会如期望地那样显示 下面我们再来看“量规“
“量规”是一个功能超强大的控件 有超级多的配置选项 我们来看下
这里有一个简单的“量规” 表示我们花园的土壤酸度水平 它使用的是“圆形量规”风格
我们也可以添加一个当前值标签 显示在“量规”的正中间 让用户可以一眼明白它
对于有些“量规” 标明起始值和终止值可能很有用 这里“量规”的值是从 3 到 10 下面我们添加标签 输入最低值和最大值
和“进度视图”一样 “量规”也可以着色 这里我们使用绿色
但量规真正实用的地方在于颜色渐变 通过使用 SwiftUI 的渐变 我能为酸度量规轻松指定颜色结点
“量规”也有线性风格 非常适合“矩形”复杂功能 比如在 Modular Compact 表盘上 (花园土壤酸度) 以上是“量规” API 的介绍 不过有一点不要忘了 “量规”和“进度视图” 都是 SwiftUI 中的新控件 你们可以根据需要进行构建 例如 我们在“矩形”复杂功能中 使用一个“圆形”量规
或者在 app 中直接使用“量规”
以上是我们 在 SwiftUI 和 ClockKit 中 添加的新 API 接下来我们介绍 关于表盘我最喜欢的功能之一 表盘着色
表盘支持各种颜色 因此 可以进行更多个性化设置 复杂功能使用这个表盘颜色 赋予每一个表盘独特的风格
有些表盘 比如太阳刻度盘 更进一步 它随着时间的变化 改变着色颜色和每一个复杂功能的颜色
因此 理解你的复杂功能 在着色表盘上的表现 是设计复杂功能的本质 下面我们详细学习表盘着色的工作机制 (表盘着色) 我这里有一个全色视图 蓝色圆形上有一个黄色苹果 (全色) 当表盘用一种颜色着色后 会采用两种可能的着色效果之一
第一个是不饱和着色 第二个是颜色不透明着色 (不饱和) 我们先来讲下不饱和着色
不饱和着色是复杂功能的默认着色模式 当表盘着色时 会创建一个灰色调视图 (子午线 特大号) 一些表盘 比如“特大号”表盘 可能在这个不饱和视图上应用单个颜色 我们来看下 如何构建一个 SwiftUI 复杂功能 让它在表盘上变得不饱和
这里是我视图的代码 一个圆形和一个苹果图片的 ZStack
在表盘上看起来还不错
当表盘颜色变为红色时 可以看到默认的不饱和模式开始出现 视图在表盘上自动变为不饱和
这里是一个“特大号”表盘 在不饱和视图上应用了单色 这比较简单 不用更改 SwiftUI 视图 就可以给复杂功能顺利着色
不过需要注意你为复杂功能选择的颜色
如果我选择了一个亮度类似的颜色 那么视图变为不饱和时 苹果就会消失 因此在构建复杂功能时 考虑不饱和情况下视图的外观 非常重要
以上是不饱和着色的内容 接下来我们讨论颜色不透明着色 (颜色不透明) 不饱和着色是默认着色模式 颜色不透明是 我们可以选择的另外一种着色方式 这需要我们在复杂功能中创建图层 然后表盘为不同的图层应用不同的颜色
我们从全色视图开始 首先确定复杂功能的图层 表盘支持两个不同的图层
这里我们让圆形和苹果分开 这就是我们的两个图层 接下来 顾名思义 表盘就是只考虑每一个视图的不透明度 既然两个视图都是完全不透明的 所以他们都是白色的
然后表盘为相应的图层应用颜色 不同表盘决定为每个图层应用相应的颜色 这里 表盘决定圆形图层应该是红色的 苹果图层应该保持原来的白色
之后两个图层合在一起 (特大号) 如何将选择的颜色应用到所有图层 是由表盘来定义的 例如 在“特大号”表盘上 我们的苹果是白色的 背景是红色 (子午线) 但是在子午线表盘上 苹果是红色的 背景是白色 (太阳刻度盘) 其他表盘比如太阳刻度盘 可能会为两个图层应用不同的颜色
下面我们来看范例 这次使用的是“特大号”表盘 看看如何对复杂功能进行颜色不透明着色
我想要圆形和苹果分别在不同的图层 默认情况下 所有视图内容都是在背景图层
通过应用复杂功能前景调节器 我决定把苹果图片 放到前景图层中 圆形保留在背景图层中 现在我有了不同的图层 颜色不透明着色开始出现
当表盘颜色改为红色时 苹果就变为白色 圆形变为红色
如果我再次改变表盘颜色 可以看到背景也相应改变 在“特大号”表盘上 背景图层和表盘颜色一致 我们来看下另外一种表盘
在子午线表盘中 可以看到 着色的图层和上面是相反的
以上是颜色不透明着色的介绍 在视图层次中创建不同的不透明图层 然后表盘 为这些图层应用颜色 效果非常棒 (高级自定义) 有些情况下 为了着色 你可能想对视图做出更多改变 例如 你可能想把背景色改为渐变的
又或者你想把背景彻底去掉 全新的复杂功能渲染模式 可以满足上述要求
渲染模式有两个值 当视图在全色表盘上显示时 就是全色 当视图在着色表盘上显示时 就是着色
我们可以从环境变量值获取当前值
我们回到范例 看下如何使用复杂功能渲染模式
首先我可以使用 环境变量获知当前渲染模式
接下来 我们通过更改圆形的填充 和复杂功能是全色还是着色 来使用渲染模式
我们会添加一个 switch 语句 检查渲染模式的当前值
在全色情况下 让圆形保持原样 使用蓝色填充
但是在着色情况下 我们会彻底改变填充 我们会使用线性渐变 而不是单色
特别是 只改变视图不透明度的渐变 回想一下 这是一个颜色不透明复杂功能 因此 屏幕显示 只需要考虑视图的不透明度 既然我们只能更改不透明度 这个渐变的值是从一到零的不透明度
现在有了一个着色的复杂功能 着色模式下的不透明度渐变填充 全色模式下的蓝色填充 信息量有些大 所以我们回顾下要点 (着色要点) 首先 默认情况下 SwiftUI 视图在表盘上是不饱和的 如果你想要颜色不透明复杂功能 那就使用复杂功能前景调节器 把视图的不同部分放到一起进行着色
最后 复杂功能渲染模式 支持视图全色和着色复杂功能的 高级自定义 至此我们学习了所有新的 API 你可以用它们 构建出色的 SwiftUI 复杂功能 不过具体到实际操作 下面由 August 为大家演示
谢谢 Matthew 我是 August Joki 一名表盘工程师 接下来我为大家 演示如何使用学到的 Xcode 知识 不久前我们推出了全新的范例代码 用以创建和更新复杂功能 它叫 Coffee Tracker 这是 app 的外观 (Coffee Tracker 范例代码 创建和更新复杂功能) 它已经包括了复杂功能 这是一个展示全新 SwiftUI 复杂功能特性的好地方
Matthew 和我 一直在想办法加入新的 SwiftUI 视图 为用户记录咖啡因消费量 他们可以看到过去一周 换算成杯数的咖啡因消费量 该图表融合了 app 的颜色 视图看起来真的不错 我们认为它会是一个很棒的 “图形矩形”复杂功能 让我们打开 Xcode 看下如何融入 SwiftUI 和复杂功能模板 以及如何支持着色的两种选项 之前在打造 app 的历史视图时 我们建立了一个预览 方便快速查看我们对视图做出的更改 对于简单视图来说 可能不需要任何更改就能加到复杂功能中 或者只是需要加入一两个 新的属性 以便在复杂功能中渲染
但鉴于我们的图表相当复杂 我们决定创建新的视图 用于复杂功能 有了单独的视图 我们可以概括复杂功能的 所有更改
我们把新的视图添加到预览 因为我们想把历史视图的 app 版本 和复杂功能历史视图放在一起 确保我们不会意外修改它 我们选取历史视图的历史图表部分 放到复杂功能中
要预览复杂功能 我们首先创建 “全视图图形矩形”模板 使用全新的 SwiftUI 视图
但是模板本身不是 SwiftUI 视图 所以不能单独预览 为此 我们给 CLK 复杂功能模板 添加了一个新功能 叫 previewContext 当 ClockKit 和 SwiftUI 一起导入时定义 该功能把模板包裹在 SwiftUI 视图中 预览知道如何将其转化为钟面 并且上面有一个复杂功能模板 所有预览的复杂功能模板都是在 最适合其分类的表盘上 由于 SwiftUI 的强大功能 复杂功能一开始就像是设计好的 不过默认的“图形矩形”字体有点大 和我们显示的内容不搭 下面我们来解决这个问题
我们为图表添加一个字体调节器 使字体大小更适合在复杂功能中显示
我们还想利用“图形矩形全视图” 模板的所有可用空间 Matthew 后面会 详细讲解复杂功能的安全区域 字体大小看起来不错 可以看到图表 和其他复杂功能一起显示在表盘上 我们应该为我们的复杂功能数据 提供一点背景 而添加标题是一种很好的方式
既然这都是 SwiftUI 我们可以添加文本"Weekly Coffee" 把它和历史图表一起放在 VStack 中 现在看起来完整多了 但如果表盘着色后 我们的复杂功能又会是什么样子呢? 为此 我们把预览的表盘颜色设置为蓝色
所有框架和之前一样 但是颜色没有了 下面我们使用复杂功能前景调节器 让标题采用着色颜色
现在标题已自动着色 匹配表盘的颜色 既然我们的侧重点是支持着色 那么我们的预览重点也放在着色上
现在可以看到一个彩色表盘 旁边是着色表盘 我刚注意到 使用复杂功能前景调节器后 渐变和量规也消失了 这是因为我们一旦采用了着色支持 我们的复杂功能就不再是不饱和的 而只使用了我们视图层次的不透明度 这意味着层次中的所有东西 都降低到了不透明度值 应用复杂功能前景调节器的部分 被放到了一起 有着相同的颜色 正如之前学习的 我们有另外一种方式处理着色 复杂功能渲染模式环境变量值 下面让我们用它在着色情况下 更改图表渲染的方式 不过我们先在预览中操作 这样在更改不同文件时 可以实时查看复杂功能的更新 这里我们的视图中 每一天对应一个圆柱
我们为复杂功能渲染模式 添加一个环境属性 并将新的属性写入 我们的自定义“历史量规风格” 在着色情况下隐藏背景 现在可以看到图表与 全色情况下是不同的
通过复杂功能渲染模式 我们可以更改视图层次的各个部分 而不至于使代码板在全色和着色渲染之间 有太大的偏离 让我们回到复杂功能历史视图 我们知道了 新的复杂功能在蓝色表盘上的外观 但是另外一个样本预览下的颜色如何呢?
我们可以充分利用 ClockKit 和 SwiftUI 合并使用的强大功能 列出预览表盘颜色 同时查看所有表盘 现在我们能确保复杂功能的颜值 因为这里列出了用户可能会为 表盘颜色设置的一系列不同选项 我为大家演示了使用 SwiftUI 和复杂功能模板的简单方式 如何快速使用 复杂功能前景调节器支持着色 以及如何利用复杂功能渲染模式 进行更精细的着色控制 接下来再由 Matthew 讲解一些最佳做法 谢谢大家 谢谢 August 讲得非常棒 SwiftUI 使得高级图表的创建非常流畅 比如我们的每周总结视图 把它变为一个复杂功能 从未如此简单过
接下来 我们介绍一些最佳做法 帮助你们构建自己的 SwiftUI 复杂功能 (最佳做法) 首先 重要的一点是要知道 在轻触复杂功能的任意位置时 你的 app 会启动 复杂功能不支持按钮 手势和其他互动元素
在构建复杂功能时围绕文本 图片和绘制基元
我们在 Xcode 中 添加了一个新的运行完整性警告 避免你使用的视图与复杂功能不兼容 (最佳做法) 最后 不要忘记 复杂功能是由静态视图组成的时间线 因此不支持 SwiftUI 动画 (最佳做法 性能) 此外 我们希望你们考虑 视图的性能特点
为使表盘保持高水平的性能 所有 SwiftUI 视图的性能 在屏幕上显示之前都会接受检测
请查阅 《Human Interface Guidelines》 和我们的说明文档 确保你为每个复杂功能 使用了大小合适的图片
请注意特定绘制属性的运行完整性成本 比如模糊和格式化文本 只进行绝对必须的绘制
注意 性能差的视图 可能会有损复杂功能的运行完整性
留意运行完整性警告 比如这个 关于视图大小或复杂性的警告
如果你的复杂功能 发出了类似的运行完整性警告 把它作为构建错误 确保在推出复杂功能前修复这个错误 为你的用户打造最佳体验 (最佳做法 布局) 最后 介绍下关于布局的一些最佳做法
为每一个复杂功能使用默认字体大小 引导你们构建想要的视图
例如 “特大号”复杂功能 可能提供画布进行绘制 但它的目的是提供尺寸大 且容易查看的信息
注意 圆形和矩形的复杂功能分类 会掩盖你的内容以适应各自的形状
矩形全视图复杂功能的特点是 有一个可以布局的安全区域 帮助防止你的内容在表盘上被剪裁 (最佳做法 矩形全视图) 这个全新的、更大的绘制区域 可能会被 Apple Watch 显示的拐角处剪裁 特别在有些特定的表盘上 默认情况下 安全区域为你提供一个可以安全 进行所有复杂功能布局的空间 如果你想使用复杂功能的全部区域 正如我们在 Weekly Coffee 复杂功能中所做的那样 你可以使用“忽略边缘安全区域”调节器
这会为你提供一点额外的空间 不过要注意内容的布局 防止被剪裁 以上是有关 SwiftUI 复杂功能的 一些新的高级操作 (结语) 我们第一次看到了 如何将你的 SwiftUI 知识运用到表盘上
我们还介绍了一些全新的 有关文本、“进度视图”和“量规”的 API 以及复杂功能如何在表盘上着色
还有如何使用 Xcode 预览 同时处理多个复杂功能 和不同的表盘颜色 (相关视频) 如果你之前从未构建过复杂功能 或者想梳理关于 复杂功能模板和描述符的知识 请观看《为 Apple Watch 创建复杂功能》 的演讲视频
为确保你的复杂功能始终 在对的时间显示对的信息 我强烈推荐观看以下视频 《保持复杂功能的及时更新》
感谢大家
-
-
3:17 - Relative Text
import SwiftUI import ClockKit struct RelativeText: View { var body: some View { VStack(alignment: .leading) { Text("Count Down") .font(.headline) .foregroundColor(.accentColor) Label("Nap Time", systemImage: "moon.fill") Text(Date() + 100, style: .relative) } .frame(maxWidth: .infinity, alignment: .leading) } } struct RelativeText_Previews: PreviewProvider { static var previews: some View { CLKComplicationTemplateGraphicRectangularFullView(RelativeText()) .previewContext() } }
-
3:26 - Timer Text
import SwiftUI import ClockKit struct TimerText: View { var body: some View { VStack(alignment: .leading) { Label("Sourdough Timer", systemImage: "timer") .foregroundColor(.orange) Text("Time remaining: \(Date() + 100, style: .timer)") } .frame(maxWidth: .infinity, alignment: .leading) } } struct TimerText_Previews: PreviewProvider { static var previews: some View { CLKComplicationTemplateGraphicRectangularFullView(TimerText()) .previewContext() } }
-
4:04 - Progress View Sample #1
import SwiftUI import ClockKit struct ProgressSample: View { var body: some View { ProgressView(value: 0.7) .progressViewStyle(CircularProgressViewStyle()) } } struct ProgressSample_Previews: PreviewProvider { static var previews: some View { CLKComplicationTemplateGraphicCircularView(ProgressSample()) .previewContext() } }
-
4:15 - Progress View Sample #2
import SwiftUI import ClockKit struct ProgressSample: View { var body: some View { ProgressView(value: 0.7) { Image(systemName: "music.note") } .progressViewStyle(CircularProgressViewStyle()) } } struct ProgressSample_Previews: PreviewProvider { static var previews: some View { CLKComplicationTemplateGraphicCircularView(ProgressSample()) .previewContext() } }
-
4:23 - Progress View Sample #3
import SwiftUI import ClockKit struct ProgressSample: View { var body: some View { ProgressView(value: 0.7) { Image(systemName: "music.note") } .progressViewStyle(CircularProgressViewStyle(tint: .red)) } } struct ProgressSample_Previews: PreviewProvider { static var previews: some View { CLKComplicationTemplateGraphicCircularView(ProgressSample()) .previewContext() } }
-
4:29 - Progress View Sample #4
import SwiftUI import ClockKit struct ProgressSample: View { var body: some View { VStack(alignment: .leading) { Text("Water Reminder") .foregroundColor(.blue) Text("32 oz. consumed") ProgressView(value: 0.7) .progressViewStyle(LinearProgressViewStyle(tint: .blue)) } } } struct ProgressSample_Previews: PreviewProvider { static var previews: some View { CLKComplicationTemplateGraphicRectangularFullView(ProgressSample()) .previewContext() } }
-
4:45 - Gauge Sample #1
import SwiftUI import ClockKit struct GaugeSample: View { var body: some View { Gauge(value: 5.8, in: 3...10) { Image(systemName: "drop.fill") .foregroundColor(.green) } .gaugeStyle(CircularGaugeStyle()) } } struct GaugeSample_Previews: PreviewProvider { static var previews: some View { CLKComplicationTemplateGraphicCircularView(GaugeSample()) .previewContext() } }
-
4:55 - Gauge Sample #2
import SwiftUI import ClockKit struct GaugeSample: View { @State var acidity = 5.8 var body: some View { Gauge(value: acidity, in: 3...10) { Image(systemName: "drop.fill") .foregroundColor(.green) } currentValueLabel: { Text("\(acidity, specifier: "%.1f")") } .gaugeStyle(CircularGaugeStyle()) } } struct GaugeSample_Previews: PreviewProvider { static var previews: some View { CLKComplicationTemplateGraphicCircularView(GaugeSample()) .previewContext() } }
-
5:02 - Gauge Sample #3
import SwiftUI import ClockKit struct GaugeSample: View { @State var acidity = 5.8 var body: some View { Gauge(value: acidity, in: 3...10) { Image(systemName: "drop.fill") .foregroundColor(.green) } currentValueLabel: { Text("\(acidity, specifier: "%.1f")") } minimumValueLabel: { Text("3") } maximumValueLabel: { Text("10") } .gaugeStyle(CircularGaugeStyle()) } } struct GaugeSample_Previews: PreviewProvider { static var previews: some View { CLKComplicationTemplateGraphicCircularView(GaugeSample()) .previewContext() } }
-
5:14 - Gauge Sample #4
import SwiftUI import ClockKit struct GaugeSample: View { @State var acidity = 5.8 var body: some View { Gauge(value: acidity, in: 3...10) { Image(systemName: "drop.fill") .foregroundColor(.green) } currentValueLabel: { Text("\(acidity, specifier: "%.1f")") } minimumValueLabel: { Text("3") } maximumValueLabel: { Text("10") } .gaugeStyle(CircularGaugeStyle(tint: .green)) } } struct GaugeSample_Previews: PreviewProvider { static var previews: some View { CLKComplicationTemplateGraphicCircularView(GaugeSample()) .previewContext() } }
-
5:21 - Gauge Sample #5
import SwiftUI import ClockKit struct GaugeSample: View { @State var acidity = 5.8 var body: some View { Gauge(value: acidity, in: 3...10) { Image(systemName: "drop.fill") .foregroundColor(.green) } currentValueLabel: { Text("\(acidity, specifier: "%.1f")") } minimumValueLabel: { Text("3") } maximumValueLabel: { Text("10") } .gaugeStyle( CircularGaugeStyle( tint: Gradient(colors: [.orange, .yellow, .green, .blue, .purple]) ) ) } } struct GaugeSample_Previews: PreviewProvider { static var previews: some View { CLKComplicationTemplateGraphicCircularView(GaugeSample()) .previewContext() } }
-
5:34 - Gauge Sample #6
import SwiftUI import ClockKit struct GaugeSample: View { @State var acidity = 5.8 var body: some View { VStack(alignment: .leading) { Text("Garden Soil Acidity") .foregroundColor(.green) Gauge(value: acidity, in: 3...10) { Image(systemName: "drop.fill") .foregroundColor(.green) } currentValueLabel: { Text("\(acidity, specifier: "%.1f")") } minimumValueLabel: { Text("3") } maximumValueLabel: { Text("10") } .gaugeStyle( LinearGaugeStyle( tint: Gradient(colors: [.orange, .yellow, .green, .blue, .purple]) ) ) } } } struct GaugeSample_Previews: PreviewProvider { static var previews: some View { CLKComplicationTemplateGraphicRectangularFullView(GaugeSample()) .previewContext() } }
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。