Install any skill in seconds. Free to start, no credit card required.
Get Started Free →athevon/swiftui-motion
SwiftUI animation foundations - withAnimation, transitions, matchedGeometryEffect, PhaseAnimator, KeyframeAnimator, springs, gestures.
Passed 22 of 22 test cases with the skill, and 18 of 22 without it.
and 1 more in the full report
4 fixed18 passed either way0 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 4 test cases the skill fixed. Same model, same prompt, with and without the skill.
My SwiftUI expandable detail card stutters during frame size changes and feels jarring when removed from the screen. Here is my current view toggled by an expanded state variable. Could you refactor this view so the layout transitions feel natural, entry and exit effects are smooth, and animation modifiers are applied according to performance best practices?
| Checked | Without skill | With skill |
|---|---|---|
| Replaces direct frame size animation with scale transformations or layout transitions. | Passed | Passed |
| Combines opacity with scale or move transitions to avoid scaling down to zero. | Passed | Passed |
| Reads accessibilityReduceMotion from the environment. | Missed | Passed |
The instructions your model reads when the skill loads.
Version-sensitive. Every API name, SDK gate and browser-support claim below was verified on 2026-09-08 against primary sources. What against, and when, is in
_jutsu/VERSIONS.md. If that date is old, re-verify before acting on a version number.
SwiftUI animation core. Loaded for any SwiftUI project (iOS, macOS, multi-target Apple). Concise rules here. Deep-dive in
references/. Pair with../motion-principles/SKILL.md(foundation) and../mobile-principles/SKILL.md(touch UX).
| Need | API |
|---|---|
| Single value over time | withAnimation { } + @State or .animation(_, value:) |
| Multiple coordinated states | PhaseAnimator(phases) (iOS 17+) |
| Time-based keyframes | KeyframeAnimator(initialValue:repeating:content:) (iOS 17+) |
| Custom property animations | @Animatable macro (needs Xcode 26 / SwiftUI 2025 SDK to compile; runtime availability iOS 13.0+ / macOS 10.15+ / watchOS 6.0+) or the Animatable protocol by hand (iOS 13+) |
| Shared element transitions | matchedGeometryEffect(id:in:) |
| Gesture-driven | DragGesture / MagnifyGesture + .offset / .scaleEffect |
| Loop forever | .animation(.linear.repeatForever(autoreverses: true), value: ...) or .phaseAnimator |
Rule: start with withAnimation. Reach for PhaseAnimator only when you have 3+ ordered states. Reach for KeyframeAnimator only when you need parallel time-based tracks.
SwiftUI ships named spring presets (iOS 17+): .snappy, .bouncy, .smooth, plus the parameterised
.spring(duration:bounce:blendDuration:) and .interactiveSpring(...). Each of the three named ones
also takes (duration:extraBounce:) overloads. Use them. Tune response / dampingFraction only when
a preset is wrong.
| Preset (iOS 17+) | Equivalent | Mood |
|---|---|---|
.snappy | .spring(response: 0.5, dampingFraction: 0.85) | UI snappy |
.bouncy | .spring(response: 0.5, dampingFraction: 0.7) | playful |
.smooth | .spring(response: 0.5, dampingFraction: 1.0) | calm, no bounce |
test cases passed, vs 18 / 22 without
Published skills whose descriptions closely match this one, with their headline benchmark lift.
More skills from the same source and nearby in the registry, with their headline benchmark lift.