美文网首页
iOS-核心动画基本概念

iOS-核心动画基本概念

作者: 海浪萌物 | 来源:发表于2020-08-09 09:58 被阅读0次

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

    复杂动画的拆分经验

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

    一、core animation

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

    • 简单易用的高性能混合编程模型
    • 用类似于视图一样,使用图层来创建复杂的编程接口
    • 轻量化的数据结构,它可以同时显示让上百个图层产生动画效果
    • 一套非常简单的动画接口,能让动画运行在独立的线程中,并可以独立于主线程之外
    • 一旦动画配置完成并启动,核心动画就能独立并完全控制相应的动画帧
    • 提高应用性能,应用程序只有当发生改变的时候才会重绘内容,使用Core Animation可以不使用其他的图形api,例如OpenGL来获取高效的动画性能
    • 灵活的布局管理模型,允许图层相对同级图层的关系来设置属性的位置和大小

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

    image.png

    二、Core Animation分类

    image.png

    三、CALayer

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

    • UIView管理交互,Mac OS和iOS交互方式不一样,所以要分开

    • CALayer管理渲染,mac OS和iOS通用

    图层树:

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

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

    相关文章

      网友评论

          本文标题:iOS-核心动画基本概念

          本文链接:https://www.haomeiwen.com/subject/soyqdktx.html