QuartzCore(二)CAShapeLayer

概述

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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Morris_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值