A declarative iOS & tvOS library for building elegant view controller transitions with a Magic Move-like system.
Hero is a Swift library for building custom view controller transitions on iOS and tvOS. It solves the problem of UIKit's cumbersome transition APIs by providing a declarative layer that simplifies creating complex, interactive animations. Developers can implement Magic Move-like effects, define custom animations with modifiers, and control transitions interactively with gestures.
iOS and tvOS developers building applications that require polished, custom navigation animations, particularly those working with UIKit and seeking to enhance user experience with fluid transitions.
Developers choose Hero for its elegant, declarative API that drastically reduces the boilerplate code needed for custom transitions, its seamless integration with existing UIKit components and Auto Layout, and its powerful features like interactive gestures and dynamic duration calculations based on Material Design principles.
Elegant transition library for iOS & tvOS
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Hero abstracts UIKit's verbose transition APIs into a simple, declarative syntax, allowing developers to implement complex animations like Magic Move with just a few lines of code, as shown in the usage examples.
It works flawlessly with Auto Layout, programmatic UI, and standard UIKit components without altering their underlying state, making it easy to integrate into existing projects.
Supports interactive animations controlled by user gestures, enabling fluid, gesture-driven transitions that enhance user engagement.
Automatically calculates animation duration based on distance and size changes, adhering to Material Design principles for consistent and delightful motion.
As noted in the FAQ, mismatched coordinate spaces can cause views to be covered during transitions, requiring manual fixes with modifiers like useGlobalCoordinateSpace.
Introduces a third-party library dependency, which may lead to maintenance challenges, version conflicts, or increased app size.
Relies on wiki pages and header-docs for documentation, which might not be as comprehensive or regularly updated as official sources, posing a learning curve for advanced use cases.