Enumerate:GMCCurveTypeSpring
#import <GaiaMotionCurve/CALayer+GaiaMotionCurve.h>
CGFloat right = [[UIScreen mainScreen] bounds].size.width - 80 - 20;
GMCModel *model = [GMCModel modelWithKeyPath:@"position.x"
duration:0.75
delay:0
curveType:GMCCurveTypeSpring
fromValue:[NSValue gmc_valueWithCGFloat:_animationView.center.x]
toValue:[NSValue gmc_valueWithCGFloat:right]];
__weak typeof(self) weakSelf = self;
[_animationView.layer gmc_animateWithAnimationModels:@[model] completion:^(BOOL finished) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
weakSelf.animationView.layer.frame = CGRectMake(80, 200, 40, 40);
});
}];
Interpolator:GaiaMotionCurveSpringInterpolator
import com.gaia.MotionCurve.*;
View animationView = findViewById(R.id.animation_view);
TranslateAnimation animation = new TranslateAnimation(0, 700, 0, 0);
animation.setFillAfter(true);
animation.setDuration(700);
animation.setInterpolator(new GaiaMotionCurveSpringInterpolator());
animationView.startAnimation(animation);
Configurable Parameters:
Spring curve supports two parameter systems, Mass and RK4 (Android only supports Mass system temporarily)
Mass System:
m: mass
s: stiffness
d: damping
iv:velocity
Default:
m = 0.7
s = 380.0
d = 10.0
iv = -2.0
iOS
CGFloat right = [[UIScreen mainScreen] bounds].size.width - 80 - 20;
GMCModel *model = [GMCModel modelWithKeyPath:@"position.x"
duration:0.75
delay:0
curveType:GMCCurveTypeSpring
customArgs:@{@"m":@1.0,@"s":@380.0,@"d":@10.0,@"iv":@-2.0}
fromValue:[NSValue gmc_valueWithCGFloat:_animationView.center.x]
toValue:[NSValue gmc_valueWithCGFloat:right]];
__weak typeof(self) weakSelf = self;
[_animationView.layer gmc_animateWithAnimationModels:@[model] completion:^(BOOL finished) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
weakSelf.animationView.layer.frame = CGRectMake(80, 200, 40, 40);
});
}];
Android
View animationView = findViewById(R.id.animation_view);
TranslateAnimation animation = new TranslateAnimation(0, 700, 0, 0);
animation.setFillAfter(true);
animation.setDuration(700);
animation.setInterpolator(new GaiaMotionCurveSpringInterpolator(0.7, 380.0, 10.0, -2.0));
animationView.startAnimation(animation);
RK4 System:
t: tension
f: friction
v: velocity
Default:
t = 533.0
f = 14.0
v = -2.0
iOS
CGFloat right = [[UIScreen mainScreen] bounds].size.width - 80 - 20;
GMCModel *model = [GMCModel modelWithKeyPath:@"position.x"
duration:0.75
delay:0
curveType:GMCCurveTypeSpring
customArgs:@{@"t":@533.0,@"f":@14.0,@"v":@-2.0}
fromValue:[NSValue gmc_valueWithCGFloat:_animationView.center.x]
toValue:[NSValue gmc_valueWithCGFloat:right]];
__weak typeof(self) weakSelf = self;
[_animationView.layer gmc_animateWithAnimationModels:@[model] completion:^(BOOL finished) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
weakSelf.animationView.layer.frame = CGRectMake(80, 200, 40, 40);
});
}];