RBBAnimation
是 CAKeyframeAnimation
的一个子类,允许您使用块声明动画,而不是写出所有的单个关键帧。
这使您在指定动画时具有更大的灵活性,同时保持代码简洁。
它自带了一个对 CASpringAnimation 的替换,支持自定义缓动函数,如跳跃,以及钩子以允许您从头开始编写自己的动画。
要安装 RBBAnimation,我推荐优秀的 CocoaPods。只需将其添加到 Podfile 中
pod 'RBBAnimation', '0.4.0'
然后您就可以开始使用了!
如果您想运行打包的测试应用程序,请确保通过运行以下命令安装其依赖项
pod install
在克隆仓库后。
使用 RBBCustomAnimation
通过传递 RBBAnimationBlock
来创建任意动画
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;
};
块参数是动画的当前位置以及其总持续时间。
通常,您可能会更愿意使用高级的 RBBTweenAnimation
。
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
允许您从一个值动画化到另一个值,类似于 CABasicAnimation
,但在值如何插值方面具有更大的灵活性。
它支持与 CAMediaTimingFunction
中获得的相同的三次贝塞尔插值,使用 RBBCubicBezier
辅助函数
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;
RBBAnimation 由 Robert Böhnke 构建。它许可在 MIT 许可证下。
如果您在自己一个应用程序中使用 RBBAnimation,我很乐意听听。在推特上关注我吧,我的ID是 @ceterum_censeo。