TheAnimation is Type-safe CAAnimation wrapper.
For example, if you want to animate backgroundColor with CABasicAnimation, you need to consider type because fromValue property and so on are Any?.
If you use BasicAnimation of TheAnimation, you can animate backgroundColor without considering type! (AnimationKeyPaths.backgroundColor is AnimationKeyPath<CGColor> type.)
The way of making an animation is almost similar CAAnimation.
But you need to use animation.animate(in:) method instead of using layer.add(_:forKey:).
let view = UIView()
let animation = BasicAnimation(keyPath: .opacity)
animation.fromValue = 0
animation.toValue = 1
animation.duration = 1
animation.animate(in: view)animation.animate(in:) returns AnimaitonCanceller. You can cancel an animation with it.
let canceller = animation.animate(in: view)
canceller.cancelAnimation()To run the example project, clone the repo, and open Example directory.
| CAAnimation | TheAnimation |
|---|---|
| CAPropertyAnimation | PropertyAnimation |
| CABasicAnimation | BasicAnimation |
| CAKeyframeAnimation | KeyframeAnimation |
| CASpringAnimation | SpringAnimation |
| CATransition | TransitionAnimation |
| CAAnimationGroup | AnimationGroup |
You can add AnimationKeyPath like this.
extension AnimationKeyPaths {
static let newKeyPath = AnimationKeyPath<CGFloat>(keyPath: "abcd")
}You can handle animation did Start with func setAnimationDidStart(handler:).
In addition, you can handle animation did Stop with func setAnimationDidStop(handler:).
let view = UIView()
let animation = BasicAnimation(keyPath: .opacity)
animation.fromValue = 0
animation.toValue = 1
animation.duration = 1
animation.setAnimationDidStart {
// do something
}
animation.setAnimationDidStop { finished in
// do something
}
animation.animate(in: view)- Xcode 9.3
- iOS 9 or greater
- tvOS 9 or greater
- macOS 10.11 or greater
- Swift 4.2 (since 0.3.0)
If you’re using Carthage, simply add
TheAnimation to your Cartfile:
github "marty-suzuki/TheAnimation"TheAnimation is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'TheAnimation'marty-suzuki, [email protected]
TheAnimation is available under the MIT license. See the LICENSE file for more info.


