A μ-framework which makes chaining UIView animations more simple and elegant.
When using the UIView.animate
api, you may find yourself using the completion
to set up a new animation. This can quickly lead to code which is hard to read and suffers from the dreaded Pyramid Of Doom.
Download https://github.com/DomainGroupOSS/swift-chainable-animations/blob/master/ChainableAnimations/UIViewAnimationExtensions.swift
and add it to your project. Job done!
git "DomainGroupOSS/swift-chainable-animations" "0.1.1"
pod "SwiftChainableAnimations", "0.1.1"
//TODO
ChainableAnimations
is a single-file μ-framework which provides an alternate UIView
api:
- Use
.prepareAnimation(...)
to define the first animation... - ... and
.then(...)
any number of time afterwards to define a chain of linked animations, executed one after another. - Animations will not be performed until you call
.animate(...)
. - Parameters for all functions follow the existing
UIView.animate
conventions and will do what you expect them to.
UIView.animate(withDuration: 0.15, delay: 0.0, options: .curveEaseIn, animations: {
self.titleImageView.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
}, completion: { _ in
UIView.animate(withDuration: 0.4, delay: 0.0, options: .curveEaseOut, animations: {
self.titleImageView.transform = CGAffineTransform.identity
}, completion: nil)
})
import ChainableAnimations
UIView.prepareAnimation(withDuration: 0.15, options: .curveEaseIn) {
self.titleImageView.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
}.then(withDuration: 0.4, options: .curveEaseOut) {
self.titleImageView.transform = CGAffineTransform.identity
}.animate()
UIView.animate(withDuration: stageDuration, delay: 0, options: .curveEaseIn, animations: stageOne) { _ in
UIView.animate(withDuration: stageDuration, delay: 0, options: .curveEaseIn, animations: stageTwo, completion: { _ in
UIView.animate(withDuration: stageDuration, delay: 0, options: .curveEaseIn, animations: stageThree, completion: nil)
})
}
import ChainableAnimations
UIView
.prepareAnimation(withDuration: stageDuration, delay: 0, options: .curveEaseIn, animations: stageOne)
.then(withDuration: stageDuration, delay: 0, options: .curveEaseIn, animations: stageTwo)
.then(withDuration: stageDuration, delay: 0, options: .curveEaseIn, animations: stageThree)
.animate()