點贊動效:縮放和抖動結合

先上示例圖:


點贊動畫.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動畫

最終用動畫組組合起來即可

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容