RBBAnimation
RBBAnimation is a subclass of CAKeyframeAnimation that allows you to use
blocks to describe your animation instead of having to write out every frame by
hand.
It comes out of the box with a replacement for CASpringAnimation, support for custom easing functions such as bouncing as well as hooks to allow you to write your own animations fully from scratch.
RBBCustomAnimation
RBBCustomAnimation is the most flexible of the RBBAnimation subclasses.
To use it, simply create a new animation as you normally would
an pass in an RBBAnimationBlock from which you return the desired value for a
given point in time.
animation.animationBlock = ^(CGFloat elapsed, CGFloat duration) {
UIColor *color = [UIColor colorWithHue:elapsed / duration
saturation:1
brightness:1
alpha:1];
return (id)color.CGColor;
};
That being said, you'll probably want to use the higher-level
RBBTweenAnimation.
RBBTweenAnimation
RBBTweenAnimation is similar to CABasicAnimation in that it smoothly
interpolates between two values. Unlike CABasicAnimation however, it supports a
wider variety of easing functions.
Easing functions (or timing functions) are used to describe how fast values
change during an animation. Core Animation comes with the
CAMediaTimingFunction class, but it's limited to cubic Bézier curves.
They are also available for RBBTweenAnimation through the RBBCubicBezier
helper:
animation.easing = RBBCubicBezier(0.68, -0.55, 0.265, 1.55);
animation.duration = 0.6;
However, RBBTweenAnimation also supports more complex easing functions such as
RBBEasingFunctionEaseOutBounce:
animation.easing = RBBEasingFunctionEaseOutBounce;
animation.duration = 0.8;
If you fancy, you can also specify your own easing functions, like this sine wave here, from scratch:
animation.easing = ^CGFloat (CGFloat fraction) {
return sin((fraction) * 2 * M_PI);
};
RBBSpringAnimation
While Core Animation comes with a CASpringAnimation class to model damped
springs, it's private API and thus (more or less) off-limits, quite a shame
since it's a really gorgeous effect.
I've implemented RBBSpringAnimation as a replacement, simply specify the
springs mass, damping, stiffness as well as its initial velocity and watch
it go:
RBBSpringAnimation *animation = [RBBSpringAnimation animationWithKeyPath:@"position.y"];
animation.velocity = 0;
animation.mass = 1;
animation.damping = 10;
animation.stiffness = 100;
You can find the code on GitHub, it's MIT licensed and also available through CocoaPods.
I hope RBBAnimation will be useful to you. If you end up using it in one of your apps, I'd love to hear about that.
Posted in working-on