CAShapeLayer是什么?

首先, CAShapeLayer是继承自CALayer的. 因此可以使用CALayer的所有属性, 但是, CAShapeLayer需要和UIBezierPath曲线配合使用才有意义.他有一个path属性, 而UIBezierPath就是对CGPathRef类型的封装(CGPathRef 是CGPath的重命名 , 实质就是CGPath). 因此这两者需要配合使用.

CAShapeLayer与UIBezierPath的关系


1.CAShapeLayer中Shape代表形状, 所以需要形状才能生效
2.贝塞尔曲线可以创建基于矢量的路径, 是对CGPathRef的封装
3.贝塞尔曲线给CAShapeLayer提供路径, CAShapeLayer在提供的路径中进行渲染. 路径会闭环, 所以绘制出了shape.
4.用于CAShapeLayer的贝塞尔曲线作为path, 其path是一个首尾相接的闭环的曲线. 即使给定的贝塞尔曲线, 不是一个闭环的曲线.

CAShapeLayer是什么?_第1张图片
屏幕快照 2016-07-16 上午10.46.14.png
- (CAShapeLayer *)drawCircle {
  CAShapeLayer *circleLayer = [CAShapeLayer layer];
  // 指定frame,只是为了设置宽度和高度
  circleLayer.frame = CGRectMake(0, 0, 200, 200);
  // 设置居中显示
  circleLayer.position = self.view.center;
  // 设置填充颜色
  circleLayer.fillColor = [UIColor clearColor].CGColor;
  // 设置线宽
  circleLayer.lineWidth = 2.0;
  // 设置线的颜色
  circleLayer.strokeColor = [UIColor redColor].CGColor;
  UIBezierPath *circlePath = [UIBezierPath bezierPathWithOvalInRect:frame];
  // 使用UIBezierPath创建路径
  CGRect frame = CGRectMake(10, 10, 100, 100);
  UIBezierPath *circlePath = [UIBezierPath bezierPathWithOvalInRect:frame];

  // 设置CAShapeLayer与UIBezierPath关联
  circleLayer.path = circlePath.CGPath;
  #从运行结果来看, 更像是把贝塞尔曲线添加到了layer层.

  // 将CAShaperLayer放到某个层上显示
  [self.view.layer addSublayer:circleLayer];

  return circleLayer;
}```

你可能感兴趣的:(CAShapeLayer是什么?)