CABasicAnimation
别忘了添加到layer上!!!!!
//创建动画对象
CABasicAnimation *base = [CABasicAnimation animationWithKeyPath:@"transform.scale”];//transform.rotation.z旋转 详见layer文档
base.duration = 1;//设定开始值到结束值花费的时间
base.removedOnCompletion = YES;//指定的时间段完成后,动画就自动的从层上移除
base.speed = 1.0;//默认的值为1.0.动画播放的速度
base.beginTime = 1;//延时多长时间播放动画一班在动画组中有用
base.timeOffset = 1;//时间偏移量
base.repeatCount = HUGE_VALF;//动画重复次数
base.repeatDuration = 10;//动画重复多久
base.autoreverses = YES;//自动恢复
base.fillMode = kCAFillModeBackwards;//填充模式
/*
fillMode属性 (要想fillMode有效,最好设置removeOnCompletion = NO)
kCAFillModeRemoved 默认值,动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到动画开始前的状态
kCAFillModeForwards 当动画结束后,layer会保持动画最后的显示状态
kCAFillModeBackwards 在动画开始前,只需要将动画加入了一个layer, layer便立即进入动画的初始状态并等待动画的开始
kCAFillModeBoth 上面两个的合成,动画加入后开始前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态
*/
base.fromValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)];//开始点
base.toValue =[NSValue valueWithCGPoint:CGPointMake(100, 100)];//要移动到得点
base.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];//时间控制函数
/*
kCAMediaTimingFunctionLinear//线性匀速
kCAMediaTimingFunctionEaseIn//渐进
kCAMediaTimingFunctionEaseOut//渐出
kCAMediaTimingFunctionEaseInEaseOut//渐进检出
*/
base.calculationMode =kCAAnimationDiscrete; //物体在每个子路径下是跳着走还是匀速走即 关键帧中间的值是怎么被计算的
/*
kCAAnimationLinear//线性,默认
kCAAnimationDiscrete//离散,无中间过程,但keyTimes设置的时间依旧生效,物体跳跃地出现在各个关键帧上
kCAAnimationPaced//平均,keyTimes跟timeFunctions失效
kCAAnimationCubic//平均,同上
kCAAnimationCubicPaced//平均,同上
*/
关键帧动画
(1)按照帧进行动画
CAKeyframeAnimation *keyframe = [CAKeyframeAnimation animationWithKeyPath:@"position”];
keyframe.values = @[[NSValue valueWithCGPoint:point1],[NSValue valueWithCGPoint:point2]];//按照数组里面的点进行动画
//values指明整个动画过程中的关键帧点,需要注意的是,起点必须作为values的第一个值
(2)按照路径进行动画 事例
//path指定整个动画所经过的路径的。需要注意的是,values与path是互斥的,当values与path同时指定时,path会覆盖values,即values属性将被忽略
CAKeyframeAnimation *keyAn = [CAKeyframeAnimation animationWithKeyPath:@"position"];
keyAn.duration = 5;
CGMutablePathRef path = CGPathCreateMutable();
//起始点
CGPoint startPoint = imageV.center;
//切点 随机生成
CGPoint cp = [self random];
CGPathMoveToPoint(path, NULL, startPoint.x, startPoint.y);
CGPathAddQuadCurveToPoint(path, nil, cp.x,cp.y, p.x, p.y);
keyAn.path = path;
//添加
[imageV.layer addAnimation:keyAn forKey:@"ss"];
//释放
CGPathRelease(path);
动画组
CAAnimationGroup
group.animations//把动画放到组中