RBBAnimation

Block-based animations made easy, comes with easing functions and a CASpringAnimation replacement.

  • Owner: robb/RBBAnimation
  • Platform:
  • License:: MIT License
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

RBBAnimation

RBBAnimation is a subclass of CAKeyframeAnimation that allows you to
declare your animations using blocks instead of writing out all the
individual key-frames.

This gives you greater flexibility when specifying your animations while keeping
your code concise.

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 your writing
your own animations fully from scratch.

Installation

To install RBBAnimation, I recommend the excellent CocoaPods. Simply add this
to your Podfile

pod 'RBBAnimation', '0.4.0'

and you are ready to go!

If you'd like to run the bundled test app, make sure to install its dependencies
by running

pod install

after cloning the repo.

RBBCustomAnimation

Use RBBCustomAnimation to create arbitrary animations by passing in an
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;
};

The arguments of the block are the current position of the animation as well as
its total duration.

Most of the time, you will probably want to use the higher-level
RBBTweenAnimation.

RBBSpringAnimation

RBBSpringAnimation is a handy replacement for the private CASpringAnimation.
Specify your spring's mass, damping, stiffness as well as its initial velocity
and watch it go:

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 allows you to animate from one value to another, similar to
CABasicAnimation but with a greater flexibility in how the values should be
interpolated.

It supports the same cubic Bezier interpolation that you get from
CAMediaTimingFunction using the RBBCubicBezier helper function:

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;

However, RBBTweenAnimation also supports more complex easing functions such as
RBBEasingFunctionEaseOutBounce:

RBBTweenAnimation *bounce = [RBBTweenAnimation animationWithKeyPath:@"position.y"];
bounce.fromValue = @(-100);
bounce.toValue = @(100);
bounce.easing = RBBEasingFunctionEaseOutBounce;

bounce.additive = YES;
bounce.duration = 0.8;

You can also specify your own easing functions, from scratch:

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;

License

RBBAnimation was built by Robert Böhnke. It is licensed under the MIT
License.

If you use RBBAnimation in one of your apps, I'd love to hear about it. Feel
free to follow me on Twitter where I'm @ceterum_censeo.

Main metrics

Overview
Name With Ownerrobb/RBBAnimation
Primary LanguageObjective-C
Program languageRuby (Language Count: 2)
Platform
License:MIT License
所有者活动
Created At2013-10-11 16:49:57
Pushed At2022-06-24 14:03:15
Last Commit At2022-06-24 16:03:15
Release Count5
Last Release Namev0.4.0 (Posted on 2014-04-14 23:12:02)
First Release Name0.0.1 (Posted on 2013-10-22 12:39:04)
用户参与
Stargazers Count2.1k
Watchers Count62
Fork Count182
Commits Count102
Has Issues Enabled
Issues Count12
Issue Open Count4
Pull Requests Count10
Pull Requests Open Count2
Pull Requests Close Count2
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private