Core Animation的学习 - 4

Core Animation ,学习底层绘画与动画

2016-07-01 | 阅读

专有图层

CoreAnimation中提供了一些专有图层,以方便做出特殊效果.

CAShapeLayer

CAShapeLayer是一个通过矢量图形而不是位图来绘制的图层,使用CGPath来定义绘制的图层.相比于直接使用Core Graphics绘图,CAShapeLayer有以下优点:

  • 渲染快速. CAShapeLayer使用了硬件加速,绘制图形会比Core Graphics要快.
  • 高效使用内存. 一个CAShapeLayer不需要像普通CALayer一样创建一个寄宿图形.
  • 不会被图层边界裁剪掉. 一个CAShapeLayer可以在边界之外绘制.
  • 不会出现像素化. 对CAShapeLayer做3D变换时,它不像一个有寄宿图的普通图层一样变得像素化.

CAShapeLayer可以绘制所用能够通过CGPath来表示的形状,形状不一定要闭合,图层路径也不一定要不可破,事实上你可以在一个图层上绘制几个不同的形状.

详细研究一下CAShapeLayer的所有属性:

  • path : 绘图路径.可以在layer范围外进行绘图.
  • fillColor : 填充颜色, 默认是黑色.
  • fillRule : 决定填充规则.有两种规则:

    • kCAFillRuleNonZero,判断一个点是否在图形内时,从该点作任意方向的一条射线,然后检测射线与图形路径交点的情况.从0开始计数,路径从左向右穿过射线,则计数加1,从右向左计数减一,如果结果为0表示点在图形外部,否则在图形内部.会有下图效果:

    • kCAFillRuleEvenOdd : 而奇偶判断表示,如果射线与图形路径的交点的数量是奇数,表示点在图形内部,是偶数表示点在外部.
  • strokeColor : 线的颜色.
  • strokeStart,strokeEnd : 表示画线的起始点和终止点,用[0,1]表示.在这个范围内的线会被绘制出来.默认是0和1.
  • lineWidth : 线宽
  • lineJoin : 线连接类型即两条线连接时的效果,有miter,roundbevel三种,各自效果如下图所示:

  • miterLimit : 最大斜接长度,当处于miter模式下,当有这个斜角的最大长度,如果当前角度过大导致小于设置的miterLimit,会以lineJoinbevel形式来形式,即如下图效果:

  • lineCap : 线端点的类型.kCALineCapRound 表示线的端点是圆形的,而kCALineCapSquare表示线的端点是方形的.
  • lineDashPattern : 表示线的虚线效果设置.为一个NSNumber的数组.如@[@15,@10,@5],这样的数组,绘制虚线时,首先将一条线段进行分割,即得到15,10,5,15,10,5,15...的分段,然后间隔绘制虚线,即第一个分段为实线,第二个分段为虚线,第三个分段为实线,第四个分段为虚线,这样绘制下去.
  • lineDashPhase : 表示第一条实线的长度,范围是第一条实线的长度.