Wave is a spring-based animation engine for iOS, iPadOS, and macOS. It makes it easy to create fluid, interactive, and interruptible animations that feel great.
Wave has no external dependencies and can be easily dropped into existing UIKit, SwiftUI, or AppKit based projects and apps.
Why Wave?
The core feature of Wave is that all animations are retargetable, meaning you can change an animation’s destination value in-flight, and the animation will gracefully redirect to that new value. At its core, retargeting is the process of preserving an animation’s velocity even as its target changes, which Wave does automatically. This results in animations that feel natural and responsive, especially for interactive gestures.Retargeting is particularly powerful for gesture-driven animations. When a user changes direction mid-gesture, Wave preserves the momentum and creates a smooth arc to the new destination instead of an abrupt change.
Key features
Spring-based physics
All animations use realistic spring physics with configurable damping and response values
Retargetable animations
Change animation targets in-flight while preserving velocity for fluid transitions
Zero dependencies
Drop Wave into any UIKit, SwiftUI, or AppKit project with no external dependencies
ProMotion support
Supports 120 fps animations on ProMotion devices for ultra-smooth motion
Two ways to animate
Wave provides two distinct APIs depending on your needs:Block-based animation
The easiest way to get started. Similar toUIView.animate(), but with spring physics and retargeting built-in. Wave manages all the animation details for you.
Property-based animation
For more control, useSpringAnimator to animate custom values or properties not supported by the block-based API. You receive intermediate values and drive the animation yourself.
What you’ll learn
Installation
Add Wave to your project using Swift Package Manager
Quick start
Create your first Wave animation in under 5 minutes
Block-based API
Learn to animate UIView and CALayer properties with Wave
Property-based API
Gain fine-grained control with SpringAnimator
Platform support
Wave supports the following platforms:- iOS 13.0+
- iPadOS 13.0+
- macOS 10.12+
ProMotion devices
To enable high frame-rate animations on ProMotion devices (120 fps), add a key/value pair to yourInfo.plist: