先上示例圖:
點贊動畫.gif
直接上代碼:
點贊動效
#define AngleRatation(angle) (angle / 180.0 * M_PI)
- (void)startAnimationPopOut {
CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
CAKeyframeAnimation *scaleAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
NSValue *scaleValue1 = [NSValue valueWithCATransform3D:CATransform3DMakeScale(2.0, 2.0, 0)];
NSValue *scaleValue2 = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.5, 0.5, 0)];
NSValue *scaleValue3 = [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.2, 1.2, 0)];
NSValue *scaleValue4 = [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 0)];
scaleAnimation.values = @[scaleValue1,scaleValue2,scaleValue3,scaleValue4];
CAKeyframeAnimation *rotateAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation"];
NSValue *rotateValue1 = @(AngleRatation(20));
NSValue *rotateValue2 = @(AngleRatation(-20));
NSValue *rotateValue3 = @(AngleRatation(10));
NSValue *rotateValue4 = @(AngleRatation(0));
rotateAnimation.values = @[rotateValue1,rotateValue2,rotateValue3,rotateValue4];
animationGroup.animations = @[scaleAnimation,rotateAnimation];
animationGroup.duration = 0.8;
animationGroup.removedOnCompletion = NO;
animationGroup.fillMode = kCAFillModeForwards;
animationGroup.repeatCount = 0;
animationGroup.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[self.iconImageView.layer addAnimation:animationGroup forKey:@"animationGroup"];
}
取消點贊動效
- (void)startAnimationPopIn {
CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
CAKeyframeAnimation *scaleAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
NSValue *scaleValue1 = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.5, 0.5, 0)];
NSValue *scaleValue2 = [NSValue valueWithCATransform3D:CATransform3DMakeScale(2.0, 2.0, 0)];
NSValue *scaleValue3 = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.8, 0.8, 0)];
NSValue *scaleValue4 = [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 0)];
scaleAnimation.values = @[scaleValue1,scaleValue2,scaleValue3,scaleValue4];
CAKeyframeAnimation *rotateAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation"];
NSValue *rotateValue1 = @(AngleRatation(10));
NSValue *rotateValue2 = @(AngleRatation(-20));
NSValue *rotateValue3 = @(AngleRatation(20));
NSValue *rotateValue4 = @(AngleRatation(0));
rotateAnimation.values = @[rotateValue1,rotateValue2,rotateValue3,rotateValue4];
animationGroup.animations = @[scaleAnimation,rotateAnimation];
animationGroup.duration = 0.8;
animationGroup.removedOnCompletion = NO;
animationGroup.fillMode = kCAFillModeForwards;
animationGroup.repeatCount = 0;
animationGroup.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[self.iconImageView.layer addAnimation:animationGroup forKey:@"animationGroup"];
}
微博的點贊效果很是給力,最近有需求讓實現那種效果,最終做了這種簡化后的效果
動畫拆分:
1.scale動畫
2.rotation動畫
最終用動畫組組合起來即可