iOS-核心动画基本概念

2020-08-09  本文已影响0人  海浪萌物

熟悉API方法调用-熟能生巧

复杂动画的拆分经验

每个像素点的处理都是一次计算,因为GPU上有很多计算单元,可以独立的计算,而CPU需要不断的切换,没法专注一个计算,所以像素点的计算是通过GPU来计算的

一、core animation

Core Animation是对图形处理的封装,方便开发者进行调用的一套API

2015年后Core Animation底层变成了Metal,以前是OpenGL ES

image.png

二、Core Animation分类

image.png

三、CALayer

单一职责,UIView和CALayer职责是不一样的

图层树:

渲染树:每次渲染都是单独的线程

CAAnimationGroup:动画组

CABasicAnimation:可以设置动画的起点和结束点
- keyPath:不同的参数对应不同的值,例如"postition.y"代表修改Y的值

- toValue:目标值
- removedOnCompletion:动画结束后会不会回到原来位置,默认是YES

- fillMode:kCAFillModeForwards,设置下才能在动画结束后不回到原来位置 

  - kCAFillModeForwards:动画结束后layer保持动画最后的状态
  - kCAFillModeBackwards:在动画开始前,只要将动画加入一个layer,layer便立即进入动画的初始状态并等待动画开始,有一个准备动作
  - kCAFillModeBoth:上面两个结合,一般采用第一中
  - kCAFillModeRemoved:默认值,动画结束后回到原来样子,实现方式是先把原始图层隐藏,然后复制一个图层去执行动画,动画结束后会把复制的图层kill掉,然后将原始图层再显示出来

隐式动画:没指定任何动画,但是core animation会自己去添加一个动画,隐式动画时间是0.25秒,通过runloop去执行的

CAKeyframeAnimation:指定动画路径

CATransition:苹果封装好的动画,没有属性,都是类方法,只能通过压栈方式

    //begin a new transaction
    [CATransaction begin];
    
    //set the animation duration to 1 second
    [CATransaction setAnimationDuration:2.0];
    
    _layer.backgroundColor = [UIColor orangeColor].CGColor;
    //动画结束的操作
    [CATransaction setCompletionBlock:^{
        
        //rotate the layer 90 degrees
        CGAffineTransform transform = self.layer.affineTransform;
        transform = CGAffineTransformRotate(transform, M_PI_2);
        self.layer.affineTransform = transform;
        
    }];
    
    //commit the transaction
    [CATransaction commit];
上一篇 下一篇

猜你喜欢

热点阅读