iOS动画评审
ios-animation-code-review
by anderskev
Reviews iOS animation code for correctness, performance, accessibility, and Apple API best practices. Use when reviewing .swift files containing animation code — withAnimation, .animation(), PhaseAnimator, KeyframeAnimator, matchedGeometryEffect, navigationTransition, CABasicAnimation, CASpringAnimation, UIViewPropertyAnimator, UIDynamicAnimator, symbolEffect, scrollTransition, contentTransition, or custom Transition conformances.
安装
claude skill add --url github.com/openclaw/skills/tree/main/skills/anderskev/ios-animation-code-review文档
iOS Animation Code Review
Quick Reference
| Issue Type | Reference |
|---|---|
| Spring parameters, withAnimation misuse, phase/keyframe bugs | references/swiftui-animation-patterns.md |
| Frame drops, offscreen rendering, main thread blocking | references/performance.md |
| Reduce Motion, VoiceOver, motion sensitivity | references/accessibility.md |
| Transition protocol, matchedGeometryEffect, navigation transitions | references/transitions.md |
Output Format
Report each finding as:
[FILE:LINE] ISSUE_TITLE
Example: [AnimatedCard.swift:42] Missing Reduce Motion fallback for spring animation
All details, code suggestions, and rationale follow after the header line.
Review Checklist
-
@Environment(\.accessibilityReduceMotion)checked — animations have Reduce Motion fallback - Animation is not the sole feedback channel — important state changes pair with haptics (
.sensoryFeedback) or audio - Custom animation isn't duplicating system-provided motion (standard nav transitions, sheet presentation, SF Symbol effects)
- Animations on frequent interactions are brief and unobtrusive — or absent (system handles it)
- All animations are interruptible — user is never forced to wait for completion before interacting
- Spring animations use
duration/bounceparameters (not raw mass/stiffness/damping unless UIKit/CA) - No deprecated
.animation()withoutvalue:parameter -
withAnimationwraps state changes, not view declarations -
matchedGeometryEffectIDs are stable and unique within the namespace -
geometryGroup()used when parent geometry animates with child views appearing - Looping animations (
PhaseAnimator,symbolEffect) have finite phases or appropriate trigger - No
CATransaction.setAnimationDuration()in UIView-backed layers (use UIView.animate instead) - Interactive animations handle interruption (re-trigger mid-flight doesn't break state)
- Shadow animations provide explicit
shadowPath(avoids per-frame recalculation) - Gesture-driven animations preserve velocity on release for natural completion
- Gesture-driven feedback follows spatial expectations (dismiss direction matches reveal direction)
- No animation of
.id()modifier (destroys view identity — usetransitionormatchedGeometryEffectinstead)
When to Load References
- Incorrect spring setup or
withAnimationscope issues → swiftui-animation-patterns.md - Hitches, dropped frames, or expensive animations in scroll views → performance.md
- Missing Reduce Motion handling or motion accessibility → accessibility.md
matchedGeometryEffectglitches or customTransitionbugs → transitions.md
Review Questions
- Does every animation have a Reduce Motion fallback that preserves the information conveyed? Is animation the only feedback channel, or are haptics/audio supplementing it?
- Is this custom animation necessary, or does the system already provide it (standard transitions, SF Symbol effects, Liquid Glass)?
- Could this animation cause frame drops — is it animating expensive properties (blur, shadow without path, mask) in a list or scroll view?
- Are all animations interruptible? Can the user act without waiting for completion? Does gesture-driven feedback follow spatial expectations?
- Is
withAnimationscoped to the minimal state change needed, or is it wrapping unrelated mutations? - For
matchedGeometryEffect— are source and destination using the same ID and namespace, and is only one visible at a time?
相关 Skills
前端设计
by anthropics
面向组件、页面、海报和 Web 应用开发,按鲜明视觉方向生成可直接落地的前端代码与高质感 UI,适合做 landing page、Dashboard 或美化现有界面,避开千篇一律的 AI 审美。
✎ 想把页面做得既能上线又有设计感,就用前端设计:组件到整站都能产出,难得的是能避开千篇一律的 AI 味。
网页构建器
by anthropics
面向复杂 claude.ai HTML artifact 开发,快速初始化 React + Tailwind CSS + shadcn/ui 项目并打包为单文件 HTML,适合需要状态管理、路由或多组件交互的页面。
✎ 在 claude.ai 里做复杂网页 Artifact 很省心,多组件、状态和路由都能顺手搭起来,React、Tailwind 与 shadcn/ui 组合效率高、成品也更精致。
网页应用测试
by anthropics
用 Playwright 为本地 Web 应用编写自动化测试,支持启动开发服务器、校验前端交互、排查 UI 异常、抓取截图与浏览器日志,适合调试动态页面和回归验证。
✎ 借助 Playwright 一站式验证本地 Web 应用前端功能,调 UI 时还能同步查看日志和截图,定位问题更快。
相关 MCP 服务
GitHub
编辑精选by GitHub
GitHub 是 MCP 官方参考服务器,让 Claude 直接读写你的代码仓库和 Issues。
✎ 这个参考服务器解决了开发者想让 AI 安全访问 GitHub 数据的问题,适合需要自动化代码审查或 Issue 管理的团队。但注意它只是参考实现,生产环境得自己加固安全。
Context7 文档查询
编辑精选by Context7
Context7 是实时拉取最新文档和代码示例的智能助手,让你告别过时资料。
✎ 它能解决开发者查找文档时信息滞后的问题,特别适合快速上手新库或跟进更新。不过,依赖外部源可能导致偶尔的数据延迟,建议结合官方文档使用。
by tldraw
tldraw 是让 AI 助手直接在无限画布上绘图和协作的 MCP 服务器。
✎ 这解决了 AI 只能输出文本、无法视觉化协作的痛点——想象让 Claude 帮你画流程图或白板讨论。最适合需要快速原型设计或头脑风暴的开发者。不过,目前它只是个基础连接器,你得自己搭建画布应用才能发挥全部潜力。