A Swift library for running type-safe Core Animation sequences and parallel animations on iOS, tvOS, and macOS.
Sica is a Swift library that provides a simple, type-safe interface for creating complex animations using Apple's Core Animation framework. It allows developers to chain animations sequentially or run them in parallel with a fluent API, reducing the boilerplate typically associated with Core Animation. The library supports easing functions, spring animations, transitions, and looping animations, making it easier to build dynamic user interfaces on iOS, tvOS, and macOS.
iOS, tvOS, and macOS developers who need to create sophisticated UI animations with less code and more type safety than raw Core Animation APIs. It's particularly useful for developers building apps with complex motion design or interactive interfaces.
Developers choose Sica because it simplifies Core Animation with a declarative, chainable API that enforces type safety, reducing runtime errors. Its support for sequential/parallel execution, easing, springs, and transitions makes it a versatile alternative to manual CAAnimation setup.
:deer: Simple Interface Core Animation. Run type-safe animation sequencially or parallelly
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Predefined key paths for properties like position and scale enforce compile-time safety, reducing runtime errors common in raw Core Animation code, as shown in the extensive key paths table.
Supports chaining animations sequentially or in parallel with simple .sequence or .parallel calls, making complex motion design straightforward, illustrated in the sample GIFs.
Includes a variety of easing and spring animations for natural motion, with visual examples in the EasingFunctions GIF, enhancing UI polish.
Offers .forever() for looping animations and .cancel() methods for lifecycle management, simplifying state handling in interactive interfaces.
Primarily designed for Core Animation layers and UIKit/AppKit views, lacking first-class support for SwiftUI's modern declarative animation system, which may require bridging code.
Requires explicit calls to .removeAll() before reusing an animator, as noted in the README, which can lead to subtle bugs if developers forget this step.
Doesn't provide pre-built complex animations or gesture-driven interactions, forcing developers to compose everything from basic key paths, increasing initial setup time.