动画特效五:灌水动画

本人录制技术视频地址:https://edu.csdn.net/lecturer/1899 欢迎观看。

前面几个章节,已经介绍了几个动画实例,如果感兴趣的话,大家可以查看我以前的博客。今天给大家介绍一下灌水动画。先看效果图。


咋一看,好像这不是动画,好像使用了GIF图片似的。但是它的的确确是动画效果。通过这个实例,我想告诉大家一个事实:很多复杂的动画效果其实都是假象!

需求分析:

1. 圆圈外围有一个类似于指示器的东西,一直在转圈圈。

2. 根据你输入的数字的大小,水位也会对应的上升到指定的地方。


一、先看看XIB中的搭建:


请注意,我使用了一个UIImageView,名字叫做“Rotating Image”,那它为什么会绕着中心转呢? 因为它是一个方形的图片,只是一小部分是转圈圈的那块,其他的都是透明的。


二、代码说明:

有了上图的说明,我们可以很快得写出转圈圈代码了。

CABasicAnimation *rotateAction = [CABasicAnimation animation];
    rotateAction.byValue = @(2 * M_PI);
    rotateAction.keyPath = @"transform.rotation";
    rotateAction.duration = 2;
    rotateAction.repeatCount = CGFLOAT_MAX;
    
    [self.rotateImage.layer addAnimation:rotateAction forKey:kRotateAnimationKey];

接着,我们分析水位的上涨,秘密就是它其实也是一张图片,只是图片的顶部是参差不齐的。水位的上升其实就是不停的改变图片的left和top的值,这样看起来就有波浪效果了。



当水位上升到指定的高度,我们让图片不停的执行关键帧动画,让水面看起来在不停的波动。废话不多说,直接上代码。

[self.scoreTextField resignFirstResponder];
    CGFloat avgScore = [self.scoreTextField.text floatValue];
    __weak typeof(self) wself = self;
    [UIView animateWithDuration:10.0 animations:^{
        // 根据数据上升到指定位置
        self.waveImage.top = 115 - ((avgScore/100.0) * 115);
        if (avgScore == 100) {
            self.waveImage.top = -20;
        }
        self.waveImage.left = 0;
    }completion:^(BOOL finished) {
        // 到达指定位置无限动画
        CAKeyframeAnimation * moveAction = [CAKeyframeAnimation animationWithKeyPath:@"position.x"];
        moveAction.values = @[@(-60),@(0),@(60),@(0),@(-60)];
        moveAction.duration = 4;
        moveAction.repeatCount = MAXFLOAT;
        [wself.waveImage.layer addAnimation:moveAction forKey:kMoveAnimationKey];
    }];

至此,这个动画效果就实现了!!!

最后,记得移除动画,因为这两个动画一直驻留在内存中,所以当他们的载体销毁后,他们也应该释放内存。

-(void)dealloc{
    [self.rotateImage.layer removeAnimationForKey:kRotateAnimationKey];
    [self.waveImage.layer removeAnimationForKey:kMoveAnimationKey];
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋恨雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值