用途 本技能用于在 iOS 26+、macOS 26+ 至 iOS 27 的 SwiftUI 中制作 Liquid Glass 相关的动画、形变与着色器效果,并给出与苹果文档和 SDK 接口核对后的实践规范(资料标注为 2026-08 整理)。
主要能力
- 动效模型:Liquid Glass 与其动效是配套设计的,玻璃不通过淡出消失,而是通过调制透镜效果“材质化”出现;玻璃变大时材质变厚(阴影更深、透镜更强)。尺寸变化属于材质变化,因此形变必须交给系统动画,不能手工伪造。
- 硬性规则:禁止用 .opacity/淡入淡出动画驱动玻璃,应使用 glassEffectTransition(.materialize 是被认可的类淡入选项);形变需同时满足同一 GlassEffectContainer、共享 @Namespace 的 glassEffectID、视图插入/移除而非值变化、状态变化位于 withAnimation 内,且容器内几何间距满足最近边条件;交互“挤压”效果由一个布尔值 .interactive() 控制,不存在公开的弹簧/阻尼/刚度参数;所有玻璃动画需以 accessibilityReduceMotion 为门槛;同一属性只能有一个动画来源;动画上下文必须位于条件语句之外;滚动优先使用 scrollTransition / visualEffect(in:) 等渲染侧动效;动画优先级为变换(缩放/位移/旋转)优先、其次是 frame、最后是身份变化。
- 参考文件路由(按需加载,一个主题一个文件):animation-fundamentals.md(弹簧、曲线、优先级、Transaction、@Animatable、CA 桥接)、morphing.md(玻璃形变、glassEffectID、union、glassEffectTransition)、transitions-and-navigation.md(导航缩放、自定义 Transition、sheet、触摸与触控板差异)、scroll-driven.md(滚动驱动动效、scrollTransition、visualEffect、与 chrome 的交互)、phase-and-keyframe.md(PhaseAnimator、KeyframeAnimator、符号效果)、reduce-motion.md(减弱动态效果门槛与替代方案表)、metal-and-glass.md(Metal 着色器与玻璃的搭配)、performance-and-instrumentation.md(性能模型与 xctrace 采样)。
- 脚本:scripts/record_trace.py 与 scripts/analyze_trace.py(含 instruments_parser/),来自 Antoine van der Lee 的 SwiftUI-Agent-Skill(MIT,许可证随附于 scripts/LICENSE-AvdLee-SwiftUI-Agent-Skill),可将 Instruments trace(Time Profiler、Hangs、Animation Hitches、SwiftUI lanes)录制并解析为 JSON/markdown,使用方法见 performance-and-instrumentation.md。
使用方式 生成代码前必须先阅读配套 liquid-glass 技能中的可用性防火墙 references/availability-and-sdk27.md,因为动效代码同样会触发 SDK-27 的破坏性变更(如 .if 禁令、@ContentBuilder、重命名)。按路由表一次加载一个主题文件;重复任何动效结论前先对照 references/ 核实,资料指出流传文章对部分事实有误,修正后的事实位于这些文件中。优化前先用 xctrace 录制 Instruments trace,性能结论以采样证据为准,且不要用 iOS 模拟器验证 SwiftUI instrument。
适用场景 适合为 Liquid Glass 组件编写玻璃出现/消失、形变、导航缩放、滚动联动、阶段与关键帧动画等 SwiftUI 动效,并进行性能采样分析。
限制 资料未提供具体收费、价格或平台支持范围;具体弹簧/阻尼/时长取值需参考 apple-motion-feel 技能,本技能不涉及;可实现的效果以所引参考文件与 SDK 实际接口为准。