mcpField
I
ios-animation-code-review

ios-animation-code-review

github.com/existential-birds测试与质量8559 次安装11 周前更新
代码仓库

关于 ios-animation-code-review

ios-animation-code-review 是用于审查 iOS 动画代码的技能,按步骤检查动画行为、性能、无障碍和转场,并要求问题报告有代码依据。

主要功能

  1. 01盘点范围内的动画 API
  2. 02检查动画与弹簧用法
  3. 03审查性能和渲染风险
  4. 04检查减少动态效果与 VoiceOver
  5. 05验证转场和几何效果
  6. 06将问题定位到代码行

适用场景

  1. 01审查 SwiftUI 动画变更
  2. 02检查动态效果无障碍支持
  3. 03排查动画掉帧
  4. 04验证 matchedGeometryEffect 转场

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/existential-birds/beagle --skill ios-animation-code-review

安装后在 Claude Code 中输入/ios-animation-code-review确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
accessibility.md
performance.md
swiftui-animation-patterns.md
transitions.md

详细介绍

iOS 动画代码审查

快速参考

问题类型参考资料
弹簧参数、误用 withAnimation、阶段/关键帧错误references/swiftui-animation-patterns.md
掉帧、离屏渲染、阻塞主线程references/performance.md
减少动态效果、VoiceOver、动态效果敏感references/accessibility.md
Transition 协议、matchedGeometryEffect、导航转场references/transitions.md

硬性门槛(按顺序执行)

按顺序完成审查范围内文件的以下步骤。如果某一步未通过,请省略该问题、重新锚定,或降级为疑问——未满足通过条件时,不要直接提出指控。

步骤操作通过条件(客观)
1. 清点列出每个待审查文件,以及动画 API 出现的位置(行号范围或符号名称:withAnimation、.animation、matchedGeometryEffect、PhaseAnimator、UIKit/CA 动画器等)。已有书面清单;明确标注不含动画 API 的文件不在审查范围内。
2. 锚定提出问题前,重新阅读当前文件或差异代码块中的引用区域。每个 [FILE:LINE] 仍能体现相关行为;修正过时的行号,或删除该问题。
3. 佐证对于特定框架相关的说法(弹簧曲线、Transition 一致性、减少动态效果),请根据 references/*.md,核对快速参考中的对应条目。问题详情注明所用的参考文件,或声明 仅依据代码本身(没有框架规则的结构或可读性问题)。
4. 报告使用输出格式列出问题。标题符合 [FILE:LINE] ISSUE_TITLE 格式;仅对通过第 1 至 2 步门槛检查的代码应用下方核对项。

输出格式

按以下格式报告每个问题:

[FILE:LINE] ISSUE_TITLE

示例:[AnimatedCard.swift:42] 弹簧动画缺少减少动态效果的回退方案

所有详情、代码建议和理由都应写在标题行之后。

审查核对清单

  • 已检查 @Environment(\.accessibilityReduceMotion)——动画提供减少动态效果的回退方案
  • 动画不是唯一的反馈渠道——重要状态变化会搭配触觉反馈(.sensoryFeedback)或音频
  • 自定义动画没有重复系统提供的动态效果(标准导航转场、工作表展示、SF Symbol 效果)
  • 高频交互中的动画简短且不显突兀,或不使用动画(由系统处理)
  • 所有动画都可中断——用户无需等待动画结束即可交互
  • 弹簧动画使用 duration/bounce 参数(除 UIKit/CA 外,不使用原始的 mass/stiffness/damping 参数)
  • 没有使用不带 value: 参数的已弃用 .animation()
  • withAnimation 包裹的是状态变化,而非视图声明
  • matchedGeometryEffect 的 ID 在命名空间内稳定且唯一
  • 父视图几何形状随子视图显示而变化时,使用了 geometryGroup()
  • 循环动画(PhaseAnimator、symbolEffect)具有有限阶段或适当的触发条件
  • UIView 支持的图层中没有使用 CATransaction.setAnimationDuration()(应改用 UIView.animate)
  • 交互式动画可处理中断(飞行动画期间再次触发不会破坏状态)
  • 阴影动画显式提供 shadowPath(避免逐帧重新计算)
  • 手势驱动的动画在释放时保留速度,以自然完成动画
  • 手势驱动的反馈符合空间预期(关闭方向与显示方向一致)
  • 没有为 .id() 修饰符设置动画(这会破坏视图身份——应改用 transition 或 matchedGeometryEffect)

何时加载参考资料

  • Swift 设置不正确或 withAnimation 作用域问题 → swiftui-animation-patterns.md
  • 滚动视图中出现卡顿、掉帧或动画开销过大 → performance.md
  • 缺少减少动态效果的处理或动态效果无障碍支持 → accessibility.md
  • matchedGeometryEffect 异常或自定义 Transition 错误 → transitions.md

审查问题

  1. 每个动画是否都有减少动态效果的备用方案,并保留动画所传达的信息?动画是否是唯一的反馈渠道,还是有触觉反馈或音频作为补充?
  2. 这个自定义动画是否确有必要,还是系统已提供相应效果(标准转场、SF Symbol 效果、Liquid Glass)?
  3. 这个动画是否可能导致掉帧——是否在列表或滚动视图中为开销较大的属性制作动画(模糊、未指定路径的阴影、蒙版)?
  4. 所有动画都能否中断?用户能否在动画完成前进行操作?由手势驱动的反馈是否符合空间预期?
  5. withAnimation 是否仅作用于所需的最小状态变更,还是连无关的变更也一并包裹?
  6. 对于 matchedGeometryEffect,源视图和目标视图是否使用相同的 ID 和命名空间,且同一时刻是否只有一个视图可见?

评论

支持 Markdown