概述
CAShapeLayer是CALayer的子类,可以用于绘制贝塞尔曲线。
开发中经常用来绘制圆角等。
API
- path
一般的CAShapeLayer结合UIBezierPath一起使用。
这里的path可以使用UIBezierPath构建。
构建一个UIBezierPath赋值给CAShapeLayer的path属性,画出一条曲线:
// point
CGPoint startPoint = CGPointMake(CGRectGetMidX(self.view.frame)-100, CGRectGetMidY(self.view.frame));
CGPoint endPoint = CGPointMake(CGRectGetMidX(self.view.frame)+100, CGRectGetMidY(self.view.frame));
CGPoint controlPoint1 = CGPointMake(CGRectGetMidX(self.view.frame)+100, CGRectGetMidY(self.view.frame)-100);
CGPoint controlPoint2 = CGPointMake(CGRectGetMidX(self.view.frame)-100,CGRectGetMidY(self.view.frame)+100);
// 构建 path
UIBezierPath *path = [[UIBezierPath alloc] init];
[path moveToPoint:startPoint];
[path addCurveToPoint:endPoint controlPoint1:controlPoint1 controlPoint2:controlPoint2];
// 构建 shapeLayer
CAShapeLayer *shapeLayer = [[CAShapeLayer alloc]init];
shapeLayer.path = path.CGPath;
shapeLayer.fillColor = [UIColor clearColor].CGColor;
shapeLayer.strokeColor = [UIColor blackColor].CGColor;
shapeLayer.lineWidth = 5;
// 将shapeLayer添加在layer上
[self.view.layer addSublayer:shapeLayer];
- fillColor
内容填充颜色
比如上面的例子,如果将fillColor设置为红色的话,会是这样:
- strokeColor
线条颜色
- lineWidth
线条宽度
- fillRule
这是个NSString类型的属性,头文件里包装了一下,包装成CAShapeLayerFillRule对外提供。选择不同的fillRule,画出来的图形也是不一样的。
kCAFillRuleNonZero 和 kCAFillRuleEvenOdd
- strokeStart、strokeEnd
CGFloat类型的,取值范围是[0~1]。
例如设置
shapeLayer.strokeStart = 0.25;
shapeLayer.strokeEnd = 1;
- miterLimit
最大斜接长度。
CGFloat 类型的。默认是10。
斜接长度指的是在两条线交汇处内角和外角之间的距离。
只有lineJoin属性为kCALineJoinMiter时miterLimit才有效。
边角的角度越小,斜接长度就会越大。
为了避免斜接长度过长,我们可以使用miterLimit属性。
如果斜接长度超过miterLimit的值,边角会以lineJoin的“bevel”即kCALineJoinBevel类型来显示。
搞不清楚…
- lineCap
NSString类型
kCALineCapButt ?形
kCALineCapRound 圆形
kCALineCapSquare 方形
这个可以设置“线头的形状”。
//kCALineCapButt、kCALineCapRound、kCALineCapSquare
shapeLayer.lineCap = kCALineCapButt;
- lineJoin
线条连接斜角
//kCALineJoinMiter、kCALineJoinRound、kCALineJoinBevel
shapeLayer.lineJoin = kCALineJoinBevel;
- lineDashPhase
如果需要画虚线的话使用此属性
lineDashPhase指定从哪开始是虚线
//从10的坐标点开始显示
shapeLayer.lineDashPhase = 10;
//画10个点,空20格点,画20个点,虚10个点,画20个点,,,这样这三个数一直循环
shapeLayer.lineDashPattern = @[@10,@20,@20];
…
- lineDashPattern
@property(nullable, copy) NSArray<NSNumber *> *lineDashPattern;