Core Graphics路径CGMutablePath
Core Graphics路径CGMutablePath

Core Graphics路径CGMutablePath

CGMutablePath 是 Core Graphics 框架中的一个类,用来创建和编辑可变的二维绘图路径,可以添加线条、圆弧、矩形等。它是 CGPath 的可变版本。

let path = CGMutablePath()

CGPath:不可变的路径,用于绘图。

CGMutablePath:可变的路径,可以一步步添加图形。

最终可以将 CGMutablePath 转换成 CGPath(Core Graphics 使用的是 CGPath)。

示例代码

1、绘制线条

let path = CGMutablePath()
path.move(to: CGPoint(x: 10, y: 10))
path.addLine(to: CGPoint(x: 100, y: 100))
path.closeSubpath()

let shapeLayer = CAShapeLayer()
shapeLayer.path = path
shapeLayer.strokeColor = NSColor.systemBlue.cgColor
shapeLayer.fillColor = NSColor.blue.cgColor
shapeLayer.lineWidth = 10

2、多个图像

let path = CGMutablePath()

// 添加一个矩形
path.addRect(CGRect(x: 50, y: 50, width: 100, height: 100))

// 再添加一个圆角矩形
path.addRoundedRect(in: CGRect(x: 100, y: 100, width: 150, height: 100), cornerWidth: 10, cornerHeight: 10)

// 转换为 CGPath 给 CAShapeLayer 用
let shapeLayer = CAShapeLayer()
shapeLayer.path = path

3、设置中间挖空效果

let path = CGMutablePath()
path.addRect(CGRect(x: 50, y: 50, width: 100, height: 100))
path.addRoundedRect(in: CGRect(x: 100, y: 100, width: 150, height: 100), cornerWidth: 10, cornerHeight: 10)
selectionLayer.path = path
selectionLayer.fillRule = .evenOdd  // 奇偶规则

常用方法

1、addRect(_:):添加矩形;

2、addEllipse(in:):添加椭圆或圆;

3、addRoundedRect(in:cornerWidth:cornerHeight:):添加圆角矩形;

4、move(to:):移动当前点(开始新路径);

5、addLine(to:):添加线段;

6、addArc(…):添加圆弧;

7、closeSubpath():闭合当前子路径;

8、addPath(_:transform:):添加已有路径,可加变换;

9、addCurve(to:control1:control2:):添加贝塞尔曲线(曲线段);

10、addQuadCurve(to:control:):添加二次贝塞尔曲线;

11、addPath(_:transform:):合并其他路径。

12、isEmpty:路径是否为空;

13、boundingBox:获取路径的外包矩形(未考虑曲线);

14、contains(_:using:transform:):判断某个点是否在路径内部。

常见用途

用于构建复杂形状路径,例如:

1、绘制一个选区框;

2、绘制一个挖空效果(两个矩形,一个作为“洞”);

3、提供给 CAShapeLayer.path 作为路径。

总结

和CGPath相比,CGMutablePath是可变路径,但也因为是动态构造路径,需要手动保护线程安全。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注