Highlight
SF Symbols 6 新增 Wiggle、Rotate、Breathe 三种通用动画预设,升级 Replace 为 Magic Replace,改进 Variable Color 的闭环循环播放,并为自定义符号提供了完整的图层标注工具链。
核心内容
界面中的图标通常是静态的。用户扫过一屏信息时,一个不动的图标很难引起注意——你可能需要加 tooltip、改颜色、或者写额外的提示文字。SF Symbols 6 试图用动画解决这个问题:给图标一个轻量、有语义的运动,让它自己”说话”。
今年新增了三种通用动画预设。Wiggle 让符号短距离位移来吸引视线,适合引导用户注意被忽略的操作按钮。Rotate 添加旋转运动,可以模拟真实物体行为(风扇转动),也可以充当进度指示器。Breathe 通过透明度和尺寸的平滑增减,让符号呈现”活着”的状态,适合表达正在进行的录制或计时。
Replace 动画也迎来了重大升级。Magic Replace 能识别两个形状相关的符号,在切换时让斜线独立绘制和擦除、让徽章独立于基础符号出现或消失。当两个符号形状无关时,自动降级为标准 Replace。Variable Color 方面,闭合循环设计的符号现在可以无缝循环播放,不再出现跳帧。
详细内容
Wiggle(01:41)
Wiggle 用于强调变化或引导注意。支持四个基础方向:水平(左/右)、垂直(上/下)、顺时针、逆时针。还有阅读方向感知的前进/后退方向。很多符号有内置的推荐方向——纸飞机默认朝自己的朝向摆动。如果默认方向不对,可以用自定义角度覆盖,比如 315 度让纸飞机看起来要起飞(02:56)。
Image(systemName: "paperplane")
.symbolEffect(.wiggle)
关键点:
.wiggle默认使用符号内置的推荐方向- 可传入方向参数如
.wiggle.forward或.wiggle.up来自定义 - 还可指定自定义角度如
.wiggle(angle: .degrees(315))
Rotate(03:19)
Rotate 为符号添加旋转运动。整体旋转适合进度指示场景;By Layer 旋转只转符号的部分内容——比如风扇只转叶片不转底座。自定义符号需要在 SF Symbols 6 app 中标注哪些图层参与旋转,并设置旋转锚点(13:24)。
Image(systemName: "deskfan")
.symbolEffect(.rotate)
关键点:
.rotate默认整体旋转符号- By Layer 旋转需要在 SF Symbols app 中为特定图层勾选 can Rotate
- 旋转锚点默认在符号中心,可通过 Snap to Points 对齐到路径节点
Breathe(04:02)
Breathe 同时改变透明度和尺寸,让符号呈现有生命感的状态。和 Pulse 的区别:Pulse 只改变透明度,Breathe 同时改变透明度和尺寸(04:23)。在 SF Symbols app 中,启用 Pulses 选项后,已标注 Pulse 的图层会改变透明度,给 Breathe 增加更多层次(11:06)。
Image(systemName: "drop.fill")
.symbolEffect(.breathe)
关键点:
.breathe适合表达正在进行的活动(如录音、计时)- 之前标注过 Pulse 的图层在 Breathe + Pulses 模式下会自动参与透明度变化
- 不需要额外重新标注
Magic Replace(04:58)
Magic Replace 是 Replace 动画的升级。当两个符号形状相关时(比如同一基础符号加不同徽章),斜线可以独立绘制和擦除,徽章可以独立于基础符号出现、消失或替换。这是新的默认行为。如果两个符号形状无关,自动降级为标准 Replace。使用了 symbol components 的自定义符号也支持 Magic Replace,只需从 SF Symbols 6 app 重新导出并导入 Xcode 16(06:23)。
Image(systemName: isFavorite ? "heart.fill" : "heart")
.contentTransition(.symbolEffect(.magicReplace))
关键点:
.magicReplace是新的默认 Replace 行为- 形状无关的符号对会自动降级为标准 Replace
- 自定义符号需从 SF Symbols 6 app 重新导出才能支持
Variable Color 闭环改进(06:39)
Variable Color 按颜色透明度逐层推进来传达状态。符号的端点设计决定了循环效果:端点不相接叫 open loop,端点相接叫 closed loop。SF Symbols 6 改进了 closed loop 符号的循环播放,现在可以无缝衔接。支持 Variable Color 的符号可以在 SF Symbols 6 app 中标注 closed loop 设计以获得更平滑的连续播放(07:31)。
动画播放控制(11:19)
SF Symbols 6 app 提供三种重复模式:Play Once(单次播放)、Repeat with Delay(循环播放,可设置间隔)、Continuous(持续播放直到显式停止)。
自定义符号标注(12:02)
在 SF Symbols 6 app 中标注自定义符号:为 Wiggle 设置 preferred direction;为 Breathe 将不同部分放入不同图层以控制动画顺序;为 Rotate 勾选 can Rotate 并设置旋转锚点——锚点默认在符号中心,可用 Snap to Points 对齐到路径节点,需在三个字重(Ultralight、Regular、Black)中分别定义(15:18)。
新符号(15:43)
SF Symbols 6 新增超过 800 个符号,总数超过 6,000 个。新增类别包括汽车(电池、敞篷车、温度指示器)、多样化的人物活动、希腊语和西里尔字母等本地化符号、进度指示器、触觉反馈、主屏幕和小组件相关符号。
核心启发
-
做什么:用 Wiggle 替代 tooltip 或文字提示来引导用户注意关键操作按钮。为什么值得做:Wiggle 是语义明确的微动画,比静态文字提示更自然,也不会增加界面文字负担。怎么开始:在 SwiftUI 中为按钮内的 SF Symbol 添加
.symbolEffect(.wiggle),用.wiggle.up等指定方向。 -
做什么:用 Rotate By Layer 替代自定义旋转进度指示器。为什么值得做:自绘旋转动画需要管理定时器和图层,而
.symbolEffect(.rotate)是一行代码的声明式方案,且 By Layer 模式可以让风扇等符号只转叶片。怎么开始:在 SF Symbols 6 app 中为自定义符号的旋转图层勾选 can Rotate 并设置锚点,然后在代码中使用.symbolEffect(.rotate)。 -
做什么:用 Breathe 表达正在进行的后台活动。为什么值得做:Breathe 同时改变透明度和尺寸,视觉存在感比 Pulse 更强,适合录制中、计时中等需要用户感知”系统仍在工作”的场景。怎么开始:将
Image(systemName: "drop.fill")添加.symbolEffect(.breathe),搭配 Repeat with Delay 或 Continuous 模式。 -
做什么:为图标的切换状态启用 Magic Replace。为什么值得做:Magic Replace 让斜线和徽章独立过渡,比标准 Replace 的切换更流畅,用户能立刻感知”什么变了”。怎么开始:用
.contentTransition(.symbolEffect(.magicReplace))修饰符,确保符号已从 SF Symbols 6 app 重新导出。
关联 Session
- Bring expression to your app with Genmoji — 在 App 中集成 Genmoji 表达能力
- Catch up on accessibility in SwiftUI — SwiftUI 无障碍体验最新进展
- Demystify SwiftUI containers — 理解 SwiftUI 容器视图的工作原理
- Evolve your document launch experience — 优化文档类 App 的启动体验
评论
GitHub Issues · utterances