美文网首页 iOS动画研究iOS
6有关CABasicAnimation的用法

6有关CABasicAnimation的用法

作者: 面朝对象_春暖花开 | 来源:发表于2016-06-15 14:56 被阅读588次

CABasicAnimation是放在layer上面的,首先我们先了解一下层的概念.

CALayer的介绍。

    CALayer是个与UIView很类似的概念,同样有layer,sublayer、backgroundColor、frame等属性,所以说只在渲染的层次上考虑,他们两者是相同的,唯独一点:UIView可以添加通过方法选择器等添加响应事件。

因为每个UIView都有自己的layer属性,而这个属性的用途有两个:1、设置View的圆角、阴影、边框等,具体属性如下:

1. shadowPath : 设置 CALayer 背景(shodow)的位置

2. shadowOffset : shadow 在 X 和 Y 轴 上延伸的方向,即 shadow 的大小

3. shadowOpacity : shadow 的透明效果

4. shadowRadius : shadow 的渐变距离,从外围开始,往里渐变 shadowRadius 距离

5. masksToBounds : 很重要的属性,可以用此属性来防止子元素大小溢出父元素,如若防止溢出,请设为 true

6. borderWidth 和 boarderColor : 边框颜色和宽度,很常用

7. bounds : 对于我来说比较难的一个属性,测了半天也没完全了解,只知道可以用来控制 UIView 的大小,但是不能控制 位置

8. opacity : UIView 的透明效果

9. cornerRadius : UIView 的圆角

2、设置View的动画。因此对一个UIView进行animation动画,实际上就是对View的layer进行操控的。

而小编下面说的就是如何对其动画进行操控——CAAnimation。

CAAnimation的介绍

    CAAnimation可分为四种:

1、CABasicAnimation:通过设定起始点,终点,时间,动画会沿着你这设定点进行移动。可以看做特殊的CAKeyFrameAnimation。

2、CAKeyframeAnimation:Keyframe顾名思义就是关键点的frame,你可以通过设定CALayer的始点、中间关键点、终点的frame,时间,只不过你可以定义它的移动轨迹。

3、CAAnimationGroup:Group也就是组合的意思,就是把对这个Layer的所有动画都组合起来。PS:一个layer设定了很多动画,他们都会同时执行,如何按顺序执行我到时候再讲。

4、CATransition:这个就是苹果帮开发者封装好的一些动画

     这里我们拿一个Demo来详细说明,在列举例子之前,我们先看一组key值:就是在初始化CAAnimation的时候用到animationWithKeyPath:(NSString *)key中的key都有哪些.在这里我列举一些我们日常开发常用的key.

transform.rotation.x :延X轴坐标旋转 类型:CGFloat或float * M_PI。

transform.rotation.y:延Y轴坐标旋转  类型:CGFloat或float * M_PI。

transform.rotation.z:延Z轴坐标旋转  类型:CGFloat或float * M_PI。。

transform.rotation:这个与rotation.z是相同的  类型:CGFloat或float * M_PI。

transform.scale:整个layer的比例   类型:CGFloat。

transform.scale.x:x轴坐标比例变化 类型:CGFloat。

transform.scale.y:y轴坐标比例变化  类型:CGFloat。

transform.scale.z:z轴坐标比例变化  类型:CGFloat。

opacity : 透明度,闪烁等动画用        类型:CGFloat 1.0或0.0。

backgroundColor    背景颜色      类型:CGColor。

cornerRadius    圆角                    类型:CGFloat。

transform.translation.y:纵向移动  类型:CGMutablePathRef  可自定义

transform.translation.x:横向移动  类型:CGMutablePathRef  可自定义

在设置Animation的属性的时候会有一个属性为fillMode,首先声明若使用此属性,必须先写这写:animation.removedOnCompletion=NO;下面介绍fillMode的各个值:

kCAFillModeRemoved :这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态

kCAFillModeForwards :当动画结束后,layer会一直保持着动画最后的状态

kCAFillModeBackwards :这个和kCAFillModeForwards是相对的,就是在动画开始前,你只要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始.你可以这样设定测试代码,将一个动画加入一个layer的时候延迟5秒执行.然后就会发现在动画没有开始的时候,只要动画被加入了layer,layer便处于动画初始状态

kCAFillModeBoth :理解了上面两个,这个就很好理解了,这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态.

除此之外timingFunction这个属性也是很重要的,有关他的属性如下

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

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

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

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

各种动画的demo

1  永久闪烁的动画.

+(CABasicAnimation *)opacityForever_Animation:(float)time

{

CABasicAnimation *animation=[CABasicAnimation animationWithKeyPath:@"opacity"];//key 为opacity

animation.fromValue=[NSNumber numberWithFloat:1.0];

animation.toValue=[NSNumber numberWithFloat:0.0];

animation.autoreverses=YES;

animation.duration=time;

animation.repeatCount=FLT_MAX;

animation.removedOnCompletion=NO;

animation.fillMode=kCAFillModeForwards;

return animation;

}

2    有闪烁次数的动画

+(CABasicAnimation *)opacityTimes_Animation:(float)repeatTimes durTimes:(float)time

{

CABasicAnimation *animation=[CABasicAnimation animationWithKeyPath:@"opacity"];

animation.fromValue=[NSNumber numberWithFloat:1.0];

animation.toValue=[NSNumber numberWithFloat:0.4];

animation.repeatCount=repeatTimes;

animation.duration=time;

animation.removedOnCompletion=NO;

animation.fillMode=kCAFillModeForwards;

animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

animation.autoreverses=YES;

return  animation;

}

3 横向和纵向移动

+(CABasicAnimation *)moveX:(float)time X:(NSNumber *)x //横向移动

{

CABasicAnimation *animation=[CABasicAnimation animationWithKeyPath:@"transform.translation.x"];

animation.toValue=x;

animation.duration=time;

animation.removedOnCompletion=NO;

animation.fillMode=kCAFillModeForwards;

return animation;

}

+(CABasicAnimation *)moveY:(float)time Y:(NSNumber *)y //纵向移动

{

CABasicAnimation *animation=[CABasicAnimation animationWithKeyPath:@"transform.translation.y"];

animation.toValue=y;

animation.duration=time;

animation.removedOnCompletion=NO;

animation.fillMode=kCAFillModeForwards;

return animation;

}

4 缩放

+(CABasicAnimation *)scale:(NSNumber *)Multiple orgin:(NSNumber *)orginMultiple durTimes:(float)time Rep:(float)repeatTimes //缩放

{

CABasicAnimation *animation=[CABasicAnimation animationWithKeyPath:@"transform.scale"];

animation.fromValue=orginMultiple;

animation.toValue=Multiple;

animation.duration=time;

animation.autoreverses=YES;

animation.repeatCount=repeatTimes;

animation.removedOnCompletion=NO;

animation.fillMode=kCAFillModeForwards;

return animation;

}

5 group组合动画

+(CAAnimationGroup *)groupAnimation:(NSArray *)animationAry durTimes:(float)time Rep:(float)repeatTimes //组合动画

{

CAAnimationGroup *animation=[CAAnimationGroup animation];

animation.animations=animationAry;

animation.duration=time;

animation.repeatCount=repeatTimes;

animation.removedOnCompletion=NO;

animation.fillMode=kCAFillModeForwards;

return animation;

}

6 旋转

+(CABasicAnimation *)rotation:(float)dur degree:(float)degree direction:(int)direction repeatCount:(int)repeatCount //旋转

{

CATransform3D rotationTransform  = CATransform3DMakeRotation(degree, 0, 0,direction);

CABasicAnimation* animation;

animation = [CABasicAnimation animationWithKeyPath:@"transform"];

animation.toValue= [NSValue valueWithCATransform3D:rotationTransform];

animation.duration= dur;

animation.autoreverses= NO;

animation.cumulative= YES;

animation.removedOnCompletion=NO;

animation.fillMode=kCAFillModeForwards;

animation.repeatCount= repeatCount;

animation.delegate= self;

return animation;

}

总结:最近在学H5,发现其实很多属性和css的属性是相同的,对动画还是有很多不懂的地方,所以希望大家能提醒我博客上的错误,共同努力进步.谢谢大家.

相关文章

网友评论

本文标题:6有关CABasicAnimation的用法

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