iOSSwiftUI动画最佳实践Skill ios-animations

这个技能是用于 iOS 开发中 SwiftUI 动画的严格最佳实践指南,涵盖运动令牌、弹簧物理、手势连续性等 50 条规则,帮助开发者编写高性能、可访问的动画代码,符合诊所 MVVM-C 架构。关键词:iOS, SwiftUI, 动画, 最佳实践, Airbnb, 移动开发, 弹簧物理, 手势连续性。

移动开发 0 次安装 0 次浏览 更新于 3/18/2026

name: ios-animations description: 对齐诊所架构的 iOS 动画工艺指南,适用于 SwiftUI (iOS 26 / Swift 6.2),涵盖运动令牌、弹簧物理、手势连续性、空间过渡、微交互和可访问性。强制在动画视图上使用 @Equatable,并保持动画状态与域/数据功能边界对齐。在诊所模块化 MVVM-C 架构下编写、审查或重构 SwiftUI 动画代码时使用。

dot-skills — Airbnb iOS SwiftUI 动画最佳实践

针对 SwiftUI iOS 26 / Swift 6.2 应用的严格动画工艺指南。包含 8 个类别的 50 条规则,按影响优先级排序。源自 Airbnb Engineering 运动模式、Apple WWDC 会话和 Apple 人机界面指南。强制在每个动画视图上使用 @Equatable,所有弹簧/时间值的运动令牌,以及布局的设计系统令牌。

强制架构对齐

此技能设计为与 swift-ui-architectios-design-system 一起工作。所有代码示例遵循相同的不可协商约束:

  • 每个视图上的 @Equatable 宏(Airbnb 测量显示 15% 滚动卡顿减少)
  • 对于涉及业务逻辑触发的复杂动画状态,使用 @Observable
  • 对于视图拥有的动画状态(切换布尔值、拖动偏移),使用 @State
  • 设计系统令牌:Spacing.xs/sm/md/lg, Radius.sm/md/lg — 零硬编码布局数字
  • 运动令牌:Motion.standard/responsive/playful — 零分散弹簧字面量
  • 语义颜色:.backgroundSurface, .accentPrimary — 视图中无原始 Color 字面量
  • 功能动画保持仅表示层;数据/网络问题留在数据包中

范围与兄弟技能关系

此技能是运动层 — 它教导如何构建流畅、高性能的动画。当与兄弟技能一起加载时:

| 兄弟技能 | 其焦点 | 此技能的焦点 | | swift-ui-architect | 架构(模块化 MVVM-C、路由外壳、协议边界) | 动画架构(运动令牌、弹簧选择、编排) | | ios-design-system | 设计系统基础设施(令牌、样式、治理) | 运动令牌和动画组件模式 | | ios-hig | HIG 合规 模式 | 运动特定 HIG(减少运动、空间连续性) |

超出范围: 设计师创作的矢量动画(使用 Lottie 用于 After Effects 导出)。复杂的 UIKit 过渡控制器(参见 Airbnb 的声明式过渡框架)。此技能仅涵盖编程式 SwiftUI 动画。

诊所架构契约 (iOS 26 / Swift 6.2)

此技能中的所有指导假设诊所模块化 MVVM-C 架构:

  • 功能模块仅导入 Domain + DesignSystem(从不 Data,从不兄弟功能)
  • 应用目标是汇聚点,拥有 DependencyContainer、具体协调器和路由外壳布线
  • Domain 保持纯 Swift,并定义模型加上仓库、*CoordinatingErrorRoutingAppError 契约
  • Data 拥有 SwiftData/网络/同步/重试/后台 I/O 并实现 Domain 协议
  • 读/写流默认使用陈旧-重新验证读取和乐观排队写入
  • ViewModels 直接调用仓库协议(无默认用例/交互器层)

何时应用

在以下情况下参考这些指南:

  • 向 SwiftUI 视图或过渡添加动画
  • 构建手势驱动的交互(拖动、滑动、平移)
  • 使用空间过渡连接视图(展开/折叠、导航变形)
  • 设计微交互(按钮按压、切换、加载状态)
  • 使内容更改感觉物理(数字滚动、符号替换)
  • 编排多元素动画序列(KeyframeAnimator, PhaseAnimator)
  • 为设计系统定义运动令牌
  • 审查动画代码的性能、可访问性和架构合规性

规则类别按优先级

| 优先级 | 类别 | 影响 | 前缀 | 规则数 | | 1 | 弹簧物理 | 关键 | spring- | 8 | | 2 | 时间与感觉 | 关键 | feel- | 6 | | 3 | 手势连续性 | 高 | gesture- | 7 | | 4 | 空间过渡 | 高 | spatial- | 6 | | 5 | 微交互 | 高 | micro- | 6 | | 6 | 编排 | 高 | orch- | 5 | | 7 | 工艺与打磨 | 高 | craft- | 5 | | 8 | 内容运动 | 中高 | content- | 5 |

快速参考

1. 弹簧物理 (关键)

2. 时间与感觉 (关键)

3. 手势连续性 (高)

4. 空间过渡 (高)

5. 微交互 (高)

6. 编排 (高)

7. 工艺与打磨 (高)

8. 内容运动 (中高)

如何使用

阅读单独的参考文件以获取详细解释,包含不正确/正确的代码示例:

参考文件

| 文件 | 描述 | | references/_sections.md | 类别定义和排序 | | assets/templates/_template.md | 新规则模板 | | metadata.json | 版本和参考信息 |