CoreAnimation 核心动画

# CoreAnimation


##简介:
 - 1.核心动画是直接作用在CALayer上的,并非UIView
 - 2.核心动画的执行过程都是在后台进行,不会阻塞主线程
 
##动画类型:
 - 1.CABasicAnimation:基本动画,设定某个属性从某个值到某个值
 - 2.CAKeyFrameAnimation:关键帧动画,设定某个属性的值从某个值到某个值,再到某个值,积累的关键值挨着去做
 - 3.CAAnimationGroup:组动画,把其他的动画对象添加到组里面,将添加的动画对象一次执行
 - 4.CATransitionAnimation:转场动画,从一个场景切换到另一个场景,系统已经实现,不需要我们自己写
 - 5.CAPropertyAnimation:属性动画,它是CABasicAnimation和CAKeyFrameAnimation的父类


##基本使用:
- 1.创建动画对象:实例化的时候必须调用类方法,animateWithKeyPath:这个keyPath就是设定要执行动画的属性
- 2.设置动画属性
- 3.把动画对象添加到某个Layer上
- 4.若需要停止啊动画,可以调用remove方法移除动画






###1.CABasicAnimation使用示例:


属性值:fromValue,toValue,byValue


```objc
    //1.实例化动画变量,keyPath就是设置要执行动画的属性
    CABasicAnimation *anima = [CABasicAnimation animationWithKeyPath:@"position.y"];
    
    // 2.0设置时间
    anima.duration = 0.5;
    
  // 2.1设置属性
    anima.fromValue  = @50;  
    anima.toValue = @500;
      
  //  2.2 设置动画的代理
    anima.delegate = self;
   
    //2.3设置结束时候不要闪回去
    anima.fillMode = kCAFillModeForwards;
    anima.removedOnCompletion = NO;
 
    // 3.添加到按钮的layer上
    [self.blueView.layer addAnimation:anima forKey:nil];


```
- UIBasicAnimation 的keyPath如下


![](01-position.png)
![](02-bounds.png)
![](03-transform.png)


### 2.CAKeyFrameAnimation
- 0.实例化跟上面的基本动画相似,必须调用类方法,通过设定keyPath告诉系统需要执行动画的属性,假设实例化出来的对象叫anima
- 1.属性值:
  - values:一个存储NSValue对象的数组,外界将需要执行动画的几个帧的画面所在的点的位置转化成NSValue对象,保存在数组中,然后赋值给实例化出来的anima对象的values属性
  - path:外界可以将一个bezierPath对象转化成CGPath对象,赋值给anima.path
  - repeatCount:动画重复次数


###3.CAAnimationGroup


```objc
    // 1.创建组动画对象
    CAAnimationGroup *group = [CAAnimationGroup animation];
 
    // 2.设置动画属性,demo2,demo3,demo4都是不同的动画对象
    group.animations = @[
                         [self demo2],
                         [self demo3],
                         [self demo4],
                         ];
    group.duration = 2;
    group.repeatCount = CGFLOAT_MAX;


    // 3.添加到layer上
    [self.magLayer addAnimation:group forKey:nil];


```


###4.CAAnimation
一般情况下不需要我们自己写,系统已经实现.
- 下面来一个特殊的示例,就是支持左右两个方向的转场动画的实现,通过设置转场动画的属性,实现不同的动画效果.


```objc
#pragma mark - 2.轻扫触发
- (void)swipeAction:(UISwipeGestureRecognizer *)recognizer {


    // MARK: - 转场动画
    // 1.创建动画对象
    CATransition *anim = [CATransition animation];
    
    // 两个属性 type[动画的类型], subType[子类型]
    
    // 2.设置动画属性
    anim.type = kCATransitionReveal;
    
    if (recognizer.direction == UISwipeGestureRecognizerDirectionRight) {
        
        NSLog(@"向右");
        
        self.idx--;
        if (self.idx == 0) {
            self.idx = 5;
        }
        
        anim.subtype = kCATransitionFromLeft;
        
    } else {
        
        NSLog(@"向左");
        
        self.idx++;
        if (self.idx == 6) {
            self.idx = 1;
        }
    
        anim.subtype = kCATransitionFromRight;
    }
    
     // 3.添加动画
    [_imgView.layer addAnimation:anim forKey:nil];
```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值