anim
is an animation library written in Swift with a simple, declarative API in mind.
// moves box to 100,100 with default settings
anim {
self.box.frame.origin = CGPoint(x:100, y:100)
}
// after that, waits 100 ms
.wait(0.1)
// moves box to 0,0 after waiting
.then {
self.box.frame.origin = CGPoint(x:0, y:0)
}
// displays message after all animations are done
.callback {
print("Just finished moving 📦 around.")
}
It supports a bunch of easing functions and chaining multiple animations. It's a wrapper on Apple's UIViewPropertyAnimator
on its core, and falls back to UIView.animate
on versions before iOS and tvOS 10.
It uses NSAnimationContext
on macOS.
Example projects are available at examples/
folder and as targets on XCode project.
pod 'anim'
github "onurersel/anim"
Or simply drag the swift files inside src/
folder into your project.
For complete documentation, visit http://onurersel.github.io/anim/.
Initialize animations with anim
constructor.
// Initialize with default settings
anim {
// animation block
}
// or initialize with it's own settings
anim { (settings) -> (animClosure) in
settings.delay = 1
settings.duration = 0.7
settings.ease = .easeInOutBack
return {
// animation block
}
}
// or initialize layout constraint animations just by passing the parent view
anim(constraintParent: self.view) {
// animation block
}
anim(constraintParent: self.view) { (settings) -> (animClosure) in
// settings...
return {
// animation block
}
}
// you don't need to call layoutIfNeeded() before or inside the
// animation blocks, it's handled by anim
//
// for example to update constant value of a constraint,
// you can just change it inside the animation block
let width: NSLayoutConstraint //...
anim(constraintParent: self.view) {
width.constant = 100 // new value
}
// that's it!
Chain animations with then
function.
anim {}
.then{
// next animation block
}
anim {}
.then { (settings) -> animClosure in
settings.duration = 1
return {
// next animation block
}
}
anim {}
.then(constraintParent: self.view) {
// chaining constraint animations
}
.then(constraintParent: self.view) { (settings) -> animClosure in
settings.duration = 1
return {
// next animation block for constraints
}
}
Wait between animation steps with wait
function.
anim{}.wait(0.25).then{} //...
Insert callbacks between animation steps with .callback
function.
anim{}
.callback {
// custom block
}
.then{} //...
Stop animations with stop
function.
let animation = anim{}.then{} // ...
animation.stop()
You can change default animation settings through anim.defaultSettings
property.
anim.defaultSettings.ease = .easeInOutCubic
anim.Ease
exposes a bunch of easing options.
- Chaining animations
- Wait, callback functions
- Constraint animations
- iOS 8 and 9 support
- macOS support
- tvOS support
- Example projects
- API for choreographing animations
- Grouping animations
- Easing with spring
- Shape animations
anim
is released under the MIT license. See LICENSE for details.