Core Animation
基本3种动画:基本动画CABasicAnimation、 关键帧动画CAKeyframeAnimation、 转场动画CATransition
还有就是动画组:CAAnimationGroup
一、基本动画CABasicAnimation的使用:
CABasicAnimation * animation = [CABasicAnimation animation];
//相应属性的值 如:transform.scale(缩放)、 transform.rotation.z(z轴,做旋转的时候)。。。
animation.keyPath = keyPath;
animation.toValue = toValue;//如改变缩放结束时的值 toValue = @0.5 、旋转角度 toValue = @(M_PI)
animation.repeatCount = MAXFLOAT;
// 设置动画完成的时候不要移除动画
animation.removedOnCompletion = NO;
//设置动画执行完成要保持最新的效果
animation.fillMode = kCAFillModeForwards;
/*
duration 动画时长
repeatCount 动画循环次数
repeatDuration 动画时间
timingFunction 动画的速度变化
fromValue 所改变属性的起始值
toValue 所改变属性的结束时的值
*/
//添加到对应的view的layer层上
[view.layer addAnimation:animation forKey:nil];
二、关键帧动画CAKeyframeAnimation
1、模拟iOS系统删除应用晃动的动画
CAKeyframeAnimation * rotation = [CAKeyframeAnimation animation];
//相应属性
rotation.keyPath = @"transform.rotation";
//每个关键帧 改变属性的值
rotation.values = @[@(TORADION(-5)),@(TORADION(5)),@(TORADION(-5))];
rotation.repeatCount = MAXFLOAT;
//添加到相应的view的layer上
[view.layer addAnimation:rotation forKey:nil];
2、运动轨迹
//创建一个路径 或者得到一个路径
UIBezierPath * bezierPath = [UIBezierPath bezierPath];
[bezierPath moveToPoint:CGPointMake(0, 400)];
[bezierPath addLineToPoint:CGPointMake(50, 300)];
[bezierPath addLineToPoint:CGPointMake(100, 400)];
[bezierPath addLineToPoint:CGPointMake(200, 300)];
[bezierPath addLineToPoint:CGPointMake(250, 400)];
[bezierPath addLineToPoint:CGPointMake(300, 250)];
[bezierPath addLineToPoint:CGPointMake(330, 350)];
[bezierPath addLineToPoint:CGPointMake(380, 300)];
[bezierPath addLineToPoint:CGPointMake(450, 400)];
CAKeyframeAnimation * position = [CAKeyframeAnimation animation];
position.keyPath = @"position";
//动画移动路径
position.path = bezierPath.CGPath;
position.repeatCount = MAXFLOAT;
position.duration = 3;
//添加到对应的view的layer上
[view.layer addAnimation:rotation forKey:nil];
三、转场动画CATransition
转场动画一定要在转场的时候使用才有效,如:改变UIImageView的图片
//改变ImageView.image的时候(转场)
_imageView.image = [UIImage imageNamed:img];
CATransition *atransition = [CATransition animation];
//类型
atransition.type = @"rippleEffect";
atransition.duration = 1;
//添加到_imageView的layer上 [_imageView.layer addAnimation:atransition forKey:nil];
/*
类型
1.#define定义的常量
kCATransitionFade 交叉淡化过渡
kCATransitionMoveIn 新视图移到旧视图上面
kCATransitionPush 新视图把旧视图推出去
kCATransitionReveal 将旧视图移开,显示下面的新视图
2.用字符串表示
pageCurl 向上翻一页
pageUnCurl 向下翻一页
rippleEffect 滴水效果
suckEffect 收缩效果,如一块布被抽走
cube 立方体效果
oglFlip 上下翻转效果
*/
四、动画组CAAnimationGroup
这个很简单,就是把几个动画放到一个数组中去执行动画
// 同时缩放,平移,旋转
//创建一个动画组
CAAnimationGroup *group = [CAAnimationGroup animation];
//缩放
CABasicAnimation *scale = [CABasicAnimation animation];
scale.keyPath = @"transform.scale";
scale.toValue = @0.5;
//旋转
CABasicAnimation *rotation = [CABasicAnimation animation];
rotation.keyPath = @"transform.rotation";
rotation.toValue = @(arc4random_uniform(M_PI));
//平移
CABasicAnimation *position = [CABasicAnimation animation];
position.keyPath = @"position";
position.toValue = [NSValue valueWithCGPoint:CGPointMake(arc4random_uniform(200), arc4random_uniform(200))];
//添加到动画组
group.animations = @[scale,rotation,position];
//添加到相应的view的layer上
[view.layer addAnimation:group forKey:nil];
简单介绍 不好 勿喷。