美文网首页首页投稿(暂停使用,暂停投稿)iOS学习笔记
【Objective-c】动画学习笔记(二)Core Anim

【Objective-c】动画学习笔记(二)Core Anim

作者: MR_詹 | 来源:发表于2016-12-01 22:01 被阅读54次

    在上一编(视图动画) 已经简单的介绍了iOS的动画,UIView Animation是UIKit框架基于Core Animation 封装的一个动画API,依框架封装的初衷就是让功能实现更简单、更快捷,但有利必有弊,再次封装的接口只是为了某一特定需求而做的,折损了原有的可塑造性。所以实现一些更细腻、更酷炫的动画就需要了解Core Animation框架

    Snip20161030_1.png

    有一个很形象的比喻来理解核心动画:

    动画就是一部电影,CALayer是演员,CAAnimation是电影剧本,而把CAAnimation添加到CALayer就是播放电影


    重要的角色 CALayer

    说到动画就必须提到CALayer,那么什么是CALayer,到底有什么作用?
    根据官方介绍

    Paste_Image.png
    大致意思是:CALayer类是负责管理图像内容和动画的执行
    其实在开发中,我们能看得见摸得着的UIButton、UILabel、UITextView等等,都是UIView,但是UIView能够显示是因为其内部包含一个layer 属性。在创建UIView对象时,UIView内部就会自动创建一个CALayer图层,通过self.view.layer可以访问到这个图层。当UIView要显示到屏幕上时,就会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的layer图层,绘图完毕后,系统会将图层拷贝到屏幕上,完成UIView的显示。这里就说说UIView与CALayer的区别:UIView是负责响应事件(继承于UIResponder),CALayer是负责内容渲染显示以及动画的执行,从某种意义来说UIView可以算是一个特殊的CALayer。(这里深深体会到OC三个特性对于编程的重要:继承、封装和多态,将不同的功能封装到不同的类中,各执其职,清楚明了)
    CALayer的常用属性backgroundColor、border、cornerRadius、shadow。
    Snip20161030_2.png
    Snip20161030_3.png
    Snip20161030_4.png
    创建CALayer对象
    + (instancetype)layer;
    - (instancetype)initWithLayer:(id)layer;
    - (instancetype)init;
    

    讲完CALayer,介绍主角核心动画:Core Animation

    Core Animation 的动画执行过程都是在后台操作的,不会柱塞主线程,并且Core Animation是直接作用在CALayer上的。以下Core Animation的类继承结构

    Snip20161030_5.png
    CAAnimation是所有动画类的父类,但是它不能直接使用,只能事业它的子类,包括CAAnimationGroup、CABasicAnimation、CAKeyFrameAnimation、CATransition

    常用的属性说明:
    duration:动画的持续时间
    repeatCount:动画的重复次数
    repeatDuration:动画重复的时间
    removedOnCompletion:默认是YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为看CAFillModeForwards
    fillMode:决定当前对象在非active时间段的行为,比如动画开始之前,动画结束之后
    beginTime:可以用来设置动画延迟执行时间,若想延迟2S,就设置为CAurrentMediaTime()+2,CACurrentMediaTime()为图层的当前时间
    timingFunction:速度控制函数,控制动画运行的节奏
    delegate:动画代理

    相关文章

      网友评论

        本文标题: 【Objective-c】动画学习笔记(二)Core Anim

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