iOS绘图的两种方式

CAShapeLayer 属于 CoreAnimation框架 继承自CALayer
一个CAShapeLayer对象只能配合一个UIBezierPath对象,但是这个UIBezierPath实例可以添加UIBezierPath实例。UIBezierPath提供矢量路径,路径会闭环即使UIBezierPath不是一个闭环取消,这样就得到了一个shape。
UIView的[- drawRect:]方法是用CPU渲染的,而CAShaperLayer是使用GPU效率更高。

CAShapeLayer的属性:

  • path:渲染路径
  • fillColor: 图形的填充颜色(透明或者nil,不然默认是黑色)【重要】
  • lineCap: 线端口样式(粗线段起始位置的圆角还是倒角)
  • lineWidth: 线宽度
  • stokeStart:在曲线中相对起点的位置【动画】
  • strokeEnd:在曲线中相对终点的位置,必须大于stokeStart【动画】
  • [setLineDashPattern:@[@(0),@(25)]; 设置虚线:虚线段长度,虚线段的间隔

UIBezierPath的属性和常用方法:

  • 初始化实例对象

    • 默认 [UIBezierPath bezierPath];
    • 带图形的
      • 矩形曲线: [UIBezierPath bezierPathWithRect:CGRectMake(160, 70, 100, 50)]
      • 圆弧: [UIBezierPath bezierPathWithArcCenter:CGPointMake(200, 200) radius:50 startAngle:M_PI endAngle:3*M_PI clockwise:YES]
      • 椭圆: [+ bezierPathWithOvalInRect:]
  • [- moveToPoint:] 开始一个新的起点来作画

  • [- appendPath:] 添加一个子路线(同心圆)

  • [-addCurveToPoint:controlPoint1:controlPoint2] 绘制二阶贝塞尔曲线

  • [- stroke] 关闭路径,在[- UIVie drawRect:]中,在CAShapeLayer中不会使用这个方法,否则控制面板会打印一些警告。CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

PaintCode生成的代码是基于[- UIVie drawRect:],不能直接用于CAShapeLayer中,这里可以设置UIBezierPath的线宽。

在CAShapeLayer中设置UIBezierPath的线宽不起作用,需要设置CAShapeLayer的线宽。和UIBezierPath的appendPath一样CAShapeLayer也可以addSublayer
小结一下这样类有: NSString,NSMutableArray,NSMutableData,UIView,UILayer,CALayer

参考链接:

UIBezierPath
CGAffineTransform-仿射矩阵的变换
iOS UIBezierPath(贝塞尔曲线)
UIBezierPath

你可能感兴趣的:(iOS绘图的两种方式)