iOS 核心动画Core Animation

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];

简单介绍    不好  勿喷。

 

 

posted @ 2017-04-29 19:35  Gen_0  阅读(230)  评论(0编辑  收藏  举报