skills/pluk-inc/skills/emilkowal-animations-swift

emilkowal-animations-swift

SKILL.md

SwiftUI & AppKit Animation Best Practices

Comprehensive animation guide for Apple platform interfaces, adapted from Emil Kowalski's web animation principles and Framer Motion best practices. Contains 80 rules across 10 categories targeting iOS 17+, prioritized by impact.

When to Apply

Reference these guidelines when:

  • Adding animations to SwiftUI views
  • Choosing easing curves, springs, or timing values
  • Implementing gesture-based interactions (drag, tap, long press)
  • Building transitions and navigation animations
  • Using matchedGeometryEffect for shared element transitions
  • Creating scroll-linked or parallax effects
  • Using iOS 17+ PhaseAnimator or KeyframeAnimator
  • Optimizing animation performance
  • Ensuring animation accessibility with accessibilityReduceMotion
  • Writing AppKit/macOS-specific animations

Rule Categories by Priority

Priority Category Impact Prefix
1 Timing Curves & Easing CRITICAL ease-
2 Duration & Timing CRITICAL timing-
3 Animation Properties HIGH props-
4 Transforms & Effects HIGH transform-
5 Gesture & Interaction HIGH gesture-
6 Transitions & Navigation MEDIUM-HIGH transition-
7 Scroll & Parallax MEDIUM scroll-
8 Strategic Animation MEDIUM strategy-
9 Accessibility & Polish MEDIUM polish-
10 AppKit Specific LOW-MEDIUM appkit-

Quick Reference

1. Timing Curves & Easing (CRITICAL)

2. Duration & Timing (CRITICAL)

3. Animation Properties (HIGH)

4. Transforms & Effects (HIGH)

5. Gesture & Interaction (HIGH)

6. Transitions & Navigation (MEDIUM-HIGH)

7. Scroll & Parallax (MEDIUM)

8. Strategic Animation (MEDIUM)

9. Accessibility & Polish (MEDIUM)

10. AppKit Specific (LOW-MEDIUM)

Key Values Reference

Value Usage
.spring(duration: 0.3, bounce: 0.2) Standard iOS 17 spring animation
.spring(response: 0.3, dampingFraction: 0.7) Classic spring configuration
.easeOut(duration: 0.2) Standard UI transition
scaleEffect(0.97) Button press feedback
scaleEffect(0.95) Minimum enter scale (never scale to 0)
0.2 seconds Default micro-interaction duration
0.3 seconds Maximum duration for UI animations
0.5 seconds Sheet/drawer animation duration

Concept Mapping (Web to SwiftUI)

Web Concept SwiftUI Equivalent
ease-out .easeOut or Animation.easeOut(duration:)
cubic-bezier(a,b,c,d) .timingCurve(a, b, c, d, duration:)
Framer Motion spring .spring(duration:bounce:) (iOS 17+)
transform: scale(0.97) .scaleEffect(0.97)
transform-origin .scaleEffect(anchor: .topLeading)
useMotionValue @State / @GestureState
AnimatePresence .transition() + .id()
layoutId .matchedGeometryEffect(id:in:)
useScroll GeometryReader + PreferenceKey
whileHover/whileTap .onHover {} / gesture modifiers
dragConstraints DragGesture with onChange bounds
prefers-reduced-motion @Environment(\.accessibilityReduceMotion)

Reference Files

File Description
references/_sections.md Category definitions and ordering
assets/templates/_template.md Template for new rules
metadata.json Version and reference information
Weekly Installs
21
Repository
pluk-inc/skills
GitHub Stars
1
First Seen
Jan 29, 2026
Installed on
opencode15
gemini-cli15
claude-code14
codex14
github-copilot13
amp12