用途:实现或诊断 SwiftUI 动效,包括状态动画、转场、弹簧、关键帧编排、matched geometry、导航缩放视觉与符号效果。范围明确排除布局(归 swiftui-layout-components)、导航路由归属(swiftui-navigation)、状态归属(swiftui-patterns)与性能剖析(swiftui-performance)。
主要能力:按需选择机制——动作拥有的状态变更用 withAnimation;限定修饰符用作用域 .animation(:body:);值绑定的隐式动画用 .animation(:value:);插入/移除视图用 .transition 配合动画;原地内容变化用 .contentTransition;多步序列用 PhaseAnimator;多属性时间线用 KeyframeAnimator;同一层级内相关布局用 matchedGeometryEffect;可用时用 matched transition source 加 navigation zoom;语义化 SF Symbol 用 .symbolEffect;合成不足时用 Animatable 或自定义动画;层级或 display-link 工作需桥接 Core Animation。
使用方式与规则:先确认状态变更及其拥有者,判断属于修改修饰符、进出视图树、原地换内容还是相关布局间移动,选一种机制并限定到最小子树。动效应作用于状态或视觉属性而非昂贵计算;转场仅在插入/移除且该事务含动画时运行;matched geometry 需稳定 ID 与唯一意图源。逐帧 @Sendable 闭包前先捕获值,避免跨 actor 隔离;帧率范围只作提示。
限制与注意:可访问性上应读取 accessibilityReduceMotion,对平移、缩放、循环或造成空间错位的动效改用淡入、内容变化或无动画,但不必自动禁用所有细微透明度或颜色变化;无限符号与时间线效果需明确活动条件并在不再可见或相关时停止。常见错误包括在 withAnimation 外变更状态、动画不满足 VectorArithmetic 或 Animatable 的自定义类型、在完成块内再触发状态变更形成渲染反馈循环、忽略 Reduce Motion、以及在视图离屏时运行无限重复动画。选择 API 前需检查部署目标、Swift 模式与 SDK,保留项目设置并对新 API 做可用性验证。具体参考文件与代码示例暂未提供完整内容。