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-craftThis skill uses the workspace's default tool permissions.
1. **Diagnose intent** — What does the user want to animate? Button tap, screen transition, loading state, scroll effect, hero transition, something custom?
Provides Ktor server patterns for routing DSL, plugins (auth, CORS, serialization), Koin DI, WebSockets, services, and testApplication testing.
Conducts multi-source web research with firecrawl and exa MCPs: searches, scrapes pages, synthesizes cited reports. For deep dives, competitive analysis, tech evaluations, or due diligence.
Provides demand forecasting, safety stock optimization, replenishment planning, and promotional lift estimation for multi-location retailers managing 300-800 SKUs.
.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