Help us improve
Share bugs, ideas, or general feedback.
From ios-craft
Hands-on animation workshop. Use when the user wants their app to feel alive — button feedback, screen transitions, loading states, scroll effects, hero transitions. Covers implicit/explicit animations, springs, transitions, matched geometry, phase/keyframe animators, gesture-driven animation, and Lottie integration.
npx claudepluginhub ildunari/kosta-plugins --plugin ios-craftHow this skill is triggered — by the user, by Claude, or both
Slash command
/ios-craft:ios-animation-guideThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
1. **Diagnose intent** — What does the user want to animate? Button tap, screen transition, loading state, scroll effect, hero transition, something custom?
Guides SwiftUI animation patterns including implicit/explicit animations, transitions, phase/keyframe animations, Animatable protocol, and @Animatable macro. Use when implementing motion or transitions in views.
Writes Swift animation code using SwiftUI, UIKit, and Core Animation for iOS apps. Covers iOS 18-26 APIs like KeyframeAnimator, PhaseAnimator, matchedGeometryEffect for transitions, gestures, and design implementations.
Creates iOS animations and graphics using SwiftUI Canvas, Core Animation, and Lottie. Covers best practices, performance, accessibility for engaging app experiences.
Share bugs, ideas, or general feedback.
.animation — Start with the simplest approach. Apply .animation(.easeInOut, value:) to a state change. Explain that SwiftUI watches the value and interpolates any changed properties..spring(response:dampingFraction:) for natural feel. Refer to references/spring-physics-visual-guide.md for parameter combos. Default recommendation: response: 0.5, dampingFraction: 0.7 (snappy without bounce).withAnimation — When multiple views must animate together or different properties need different curves. Wrap state mutations in withAnimation(.spring) { ... }..transition(.slide), .transition(.scale), .transition(.asymmetric(...)) for insert/remove animations. Combine with if/switch and withAnimation.@Namespace + .matchedGeometryEffect(id:in:) for hero transitions between views. Warn: both source and destination must exist momentarily; use if/else not two if blocks..navigationTransition(.zoom(sourceID:in:)) and .matchedTransitionSource(id:in:) for zoom transitions in NavigationStack..scrollTransition { content, phase in ... } (iOS 17+) for parallax, scale, and opacity effects tied to scroll position.DragGesture with .offset and spring animation on .onEnded for swipe-to-dismiss, card stacks, pull-to-action.PhaseAnimator for multi-step sequential animations (pulse, shake, bounce sequences). Each phase triggers the next automatically.KeyframeAnimator for precise timeline control. Define keyframe tracks for each property (scale, rotation, offset) with exact timing.references/lottie-swiftui-integration.md for adding complex vector animations from After Effects via lottie-ios SPM package..redacted(reason: .placeholder) with shimmer overlay for skeleton screens..frame changes (triggers layout passes). Prefer .scaleEffect, .offset, .opacity, .rotationEffect — these are GPU-composited. Use .drawingGroup() for complex view hierarchies. Profile with Instruments > Core Animation.references/animation-recipes.md — 20 copy-paste recipes organized by use casereferences/spring-physics-visual-guide.md — Spring parameter combos with feel descriptionsreferences/lottie-swiftui-integration.md — Step-by-step Lottie setup for SwiftUIapple-swiftui-mastery skill — animation sections for deeper theory