RBBAnimation是CAKeyframeAnimation的一个子类,它可以让你使用block来声明动画,而不需要写出所有单独的key-frames。
这样在指定动画效果的时候就灵活很多,而且你也可以保持代码的简洁。
RBBCustomAnimation
使用RBBCustomAnimation,通过传递一个RMBBAnimationBlock来创建一个随机的动画。
RBBCustomAnimation *rainbow = [RBBCustomAnimation animationWithKeyPath:@"backgroundColor"];
rainbow.animationBlock = ^(CGFloat elapsed, CGFloat duration) {
UIColor *color = [UIColor colorWithHue:elapsed / duration
saturation:1
brightness:1
alpha:1];
return (id)color.CGColor;
};
RBBSpringAnimation
RBBSpringAnimation是CASpringAnimation很好用的一个替代品。指定弹跳物体的质量,阻尼,刚度以及初始速度之后你可以可以看物体弹跳的效果了。
RBBSpringAnimation *spring = [RBBSpringAnimation animationWithKeyPath:@"position.y"];
spring.fromValue = @(-100.0f);
spring.toValue = @(100.0f);
spring.velocity = 0;
spring.mass = 1;
spring.damping = 10;
spring.stiffness = 100;
spring.additive = YES;
spring.duration = [spring durationForEpsilon:0.01];
RBBTweenAnimation
RBBTweenAnimation允许你设置动画的值,和CABasicAnimation类似,但是比它的灵活性更大。
它支持使用RBBCubicBezier帮助功能的CAMediaTimingFunction中获得的三次贝塞尔曲线的插值:
RBBTweenAnimation *easeInOutBack = [RBBTweenAnimation animationWithKeyPath:@"position.y"];
easeInOutBack.fromValue = @(-100.0f);
easeInOutBack.toValue = @(100.0f);
easeInOutBack.easing = RBBCubicBezier(0.68, -0.55, 0.265, 1.55);
easeInOutBack.additive = YES;
easeInOutBack.duration = 0.6;
然而,RBBTweenAnimation同时还支持更复杂的一些缓动功能,比如说RBBEasingFunctionEaseOutBounce:
RBBTweenAnimation *bounce = [RBBTweenAnimation animationWithKeyPath:@"position.y"];
bounce.fromValue = @(-100);
bounce.toValue = @(100);
bounce.easing = RBBEasingFunctionEaseOutBounce;
bounce.additive = YES;
bounce.duration = 0.8;
你还可以指定你自己的缓动功能:
RBBTweenAnimation *sinus = [RBBTweenAnimation animationWithKeyPath:@"position.y"];
sinus.fromValue = @(0);
sinus.toValue = @(100);
sinus.easing = ^CGFloat (CGFloat fraction) {
return sin((fraction) * 2 * M_PI);
};
sinus.additive = YES;
sinus.duration = 2;