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];
简单介绍 不好 勿喷。