美文网首页
仿支付宝咻一咻功能

仿支付宝咻一咻功能

作者: 胖胖的立 | 来源:发表于2017-04-07 16:15 被阅读0次

    偶然间在CocoaChina上看到了一个动画类的文章,还有支付宝咻一咻的动图。俗话说,自己动手,丰衣足食,从而就出现了下面这个动图(动图做的稍有偏差)。源代码查看仿支付宝咻一咻

    其实这个功能实现起来并不是很困难,我是用的最笨的办法,创建了三个图层,利用定时器来控制不同图层添加动画的不同时间。可以先添加一个图层来实现类似的效果。

    显而易见的是,在单个图层的动画中,包括大小的变化和透明度的变化,这个时候就需要一个动画组CAAnimationGroup,将不同的动画添加到数组中负值给CAAnimationGroup唯一的属性animations之后,所有的动画就可以并发执行。需要注意的是,动画组中的动画不会被压缩,所以超出动画组时常的部分将要被剪掉。在设置动画组的时候还需要提到的一个是CAMediaTimingFunction —— 速度控制函数,顾名思义,就是用来控制动画的执行速度效果的。他包括以下几种类型:

    kCAMediaTimingFunctionLinear(线性):匀速,给你一个相对静态的感觉

    kCAMediaTimingFunctionEaseIn(渐进):动画缓慢进入,然后加速离开

    kCAMediaTimingFunctionEaseOut(渐出):动画全速进入,然后减速的到达目的地

    kCAMediaTimingFunctionEaseInEaseOut(渐近渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。这个是动画的默认行为

    kCAMediaTimingFunctionDefault(默认):同上

    说完动画组接下来就是更重要的添加到动画组中的动画了。我在写demo的过程中用了两种,分别是CABasicAnimation和CAKeyframeAnimation。

    先说一下他们的共同的属性,如下:

    duration:动画的时长

    repeatCount:重复的次数

    repeatDuration:设置动画的时间。在该时间内动画一直执行,不计次数。

    beginTime:指定动画开始的时间。从开始延迟几秒的话,设置为【CACurrentMediaTime() +秒数】的方式

    timingFunction:设置动画的速度变化

    autoreverses:动画结束时是否执行逆动画

    一些常用的animationWithKeyPath值的总结:

    transform.scale:比例转化,例如:@(0.8)

    transform.scale.x:宽的比例,例如:@(0.8)

    transform.scale.y:高的比例,例如:@(0.8)

    transform.rotation.x:围绕x轴旋转,例如:@(M_PI)

    transform.rotation.y:围绕y轴旋转,例如:@(M_PI)

    transform.rotation.z:围绕z轴旋转,例如:@(M_PI)

    cornerRadius:圆角的设置,例如:@(50)

    backgroundColor:背景颜色的变化,例如:(id)[UIColor purpleColor].CGColor

    bounds:大小,中心不变,例如:[NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)];

    position:位置(中心点的改变),例如:[NSValue valueWithCGPoint:CGPointMake(300, 300)];

    contents:内容,例如:UIImageView的图片imageAnima.toValue = (id)[UIImage imageNamed:@"to"].CGImage;

    opacity:透明度,例如:@(0.7)

    contentsRect.size.width:横向拉伸缩放,例如:@(0.4)最好是0~1之间的

    接下来就是他们的区别了:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值,如下:

    values:就是上述的NSArray对象。里面的元素称为”关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧

    keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧.当keyTimes没有设置的时候,各个关键帧的时间是平分的。

    其实CABasicAnimation可看做是最多只有2个关键帧的CAKeyframeAnimation。

    代码对比如下:

    创建完动画之后,将动画添加到图层上就可以实现单个图层的动画了,那么想要实现类似支付宝咻一咻的动画需要怎么做呢?前面也说了,我用的是最笨的方法,创建了三个图层,通过定时器来控制不同图层的动画执行时间。这里需要注意的一点就是动画的时长duration、图层的个数还有定时器的时间是相互牵制的,不然就会出现每个图层出现的很混乱的结果。想要什么样的效果就自己慢慢调吧。

    相关文章

      网友评论

          本文标题:仿支付宝咻一咻功能

          本文链接:https://www.haomeiwen.com/subject/saqhattx.html