CocoaPods trunk is moving to be read-only. Read more on the blog, there are 14 months to go.
| TestsTested | ✓ |
| LangLanguage | SwiftSwift |
| License | MIT |
| ReleasedLast Release | Oct 2017 |
| SwiftSwift Version | 3.0 |
| SPMSupports SPM | ✗ |
Maintained by Silvan Dähn.
To run the example project, clone the repo, and run the Example application target.
Chain multiple animations with different delays. Chained animations will be started with a delay after the last one started executing.
You can create a chained animation with the -beginAnimationChain function on the UIView class.
UIView.beginAnimationChain(0.5) {
view.frame.origin.y = 170
}.animate()You can provide an optional delay an UIViewAnimationOptions.
UIView.beginAnimationChain(0.5, delay: 0.2, options: .CurveEaseInOut) {
view.frame.origin.y = 170
}.animate()To add an offset animation, use the -thenAfterStart: function and append an animation closure that will be executed as soon as the last animation started, delayed by the provided offset. Add a completion closure to the animation chain and it will be executed when the previous animation in the chain completed.
UIView.beginAnimationChain(0.5, options: .CurveEaseInOut) {
view.frame.origin.y = 170
}.thenAfterStart(0.1) {
// This animation will be started 0.1 seconds
// after the previous one started
otherView.tranform = awesomeTransform
}.thenAfterStart(0.15) {
// More shiny animations
}.completion { bool in
// Do something nice on completion. Or don't.
}.animate()It is also possible to add a new chain after a previous one completed. To add a new chain call -chainAfterCompletion: and start adding animation blocks with their offset.
UIView.beginAnimationChain(0.33, options: .CurveEaseInOut) {
view.frame.origin.y = 170
}.thenAfterStart(0.15) {
// Start animations with a delayed start
}.completion { bool in
// Do something nice on the completion of the first chain.
}.chainAfterCompletion(1.2, options: .CurveEaseIn) {
// This animation will be started after the last
// animation in the first chain completed
}.thenAfterStart(0.1) {
// This animation will be started 0.1 seconds after
// the first animation in the second chain started
}.completion { _ in
// Do something nice on the completion of the second chain.
}.animate()Silvan Dähn, @silvandaehn
Chain is available under the MIT license. See the LICENSE file for more info.