众所周知,绚丽动画效果是iOS系统的一大特色,经过UIView层封装的动画,基本已经能够知足咱们应用开发的全部需求,但若须要更加自由的控制动画的展现,咱们就须要使用CoreAnimation框架中的一些类与方法。这里先附上前几篇与动画相关的博客地址,这一系列,咱们抽出其中的CoreAnimation框架来详细解读。编程
UIViewAnimation动画的使用:http://my.oschina.net/u/2340880/blog/484457 框架
UIView动画执行的另外一种方式:http://my.oschina.net/u/2340880/blog/484538动画
UIView转场动画:http://my.oschina.net/u/2340880/blog/484669spa
CoreAnimation隐式动画的应用:http://my.oschina.net/u/2340880/blog/484793.net
粒子效果的使用:http://my.oschina.net/u/2340880/blog/485095code
CoreAnimation框架是基于OpenGL与CoreGraphics图像处理框架的一个跨平台的动画框架。简单来讲,它使帮助咱们将图像读取成位图,经过硬件的处理,实现动画效果。文档中的一张图片十分形象的描述了CoreAnimation与UIKit框架的关系:blog
在CoreAnimation中,大部分的动画效果都是经过Layer层来实现的,经过CALayer,咱们能够组织复杂的层级结构。事件
在CoreAnimation中,大多数的动画效果是添加在图层属性的变化上,例如,改变图层的位置,大小,颜色,圆角半径等。Layer层并不决定视图的展示,它只是存储了视图的几何属性状态。图片
关于Layer层,咱们须要了解一个有关锚点的概念,锚点决定了图层的绘制位置以及动画展现时其参照的点,锚点的取值范围为0-1,锚点有两个地方在应用中会有很大影响:开发
1.layer层的position参照点始终和锚点重合
经过position决定了layer所在的位置,在Layer中,虽然也有frame这样的属性,但咱们不多使用,通常咱们会使用bounds和position肯定Layer层的大小和位置。
2.锚点决定进行动做的参照点
例如一个旋转动做,锚点决定了层旋转的中心点,对于放大缩小的动做,锚点决定了放大或者缩小参照的中心点。
能够来看下边一组图:
上面两个矩形,frame和bounds都是同样的,第一个矩形的锚点位置为(0.5,0.5),第二个为(0,0),
所以,两个矩形的position点是不一样的,第一个是(100,100),第二个是(40,60)。再看当产生动做时锚点的影响:
如今就很好理解了,锚点的不一样直接影响了动做产生的参照点。
经过CALayer的以下属性,咱们能够设置锚点,注意x,y的取值范围都是0~1,表明所占宽度和高度的比例:
@property CGPoint anchorPoint;
Layer是专门用于辅助咱们绘制图像的层,它使支持三维坐标系的绘制的,经过每一个坐标点与转换矩阵的运算,来决定最后绘制的状态,而且,Layer能够更高帧率的绘制动画效果。然而Layer与View依然有很大不一样,首先,咱们不可能只经过Layer来开发应用程序,Layer并无接收事件和处理用户交互的能力,这些依然须要View来完成,每个View中,都有一个Layer的属性来辅助进行图形的绘制。而且Layer是能够层级嵌套的,开发中,咱们能够根据需求灵活选择。
专一技术,热爱生活,交流技术,也作朋友。
——珲少 QQ群:203317592