将绘图剪辑到 CAShapeLayer 的不透明(描边)部分
Clip Drawing to Opaque (Stroke) Part of CAShapeLayer
我有一个 CAShapeLayer
具有不透明描边和透明填充。然后我想调用 myContext.drawRadialGradient
,但是将这个径向渐变剪辑到我的形状层的笔划。目前,我正在调用 myShapeLayer.path.addClip()
,它将径向渐变剪裁到形状层的填充区域,而不是描边。
换句话说,我想使用只是图层的不透明部分或只是描边(同样的事情在我的例子中),并用它来剪辑当前上下文。我一直在搜索 CoreGraphics 文档一段时间但无济于事。
找到我的答案。您可以创建一个新的 UIBezierPath,它是现有 UIBezierPath 的副本,带有一笔,如下所示:
let strokePath = UIBezierPath(cgPath: oldPath.cgPath.copy(
strokingWithWidth: ..., lineCap: ..., lineJoin: ..., miterLimit: ...))
strokePath.addClip()
如果将形状图层添加为渐变图层的蒙版会怎么样?这应该有效,因为这是遮罩层应该做的。
如果这不起作用,您可能需要将形状层捕获到图像并将其安装为渐变层的蒙版。
将描边路径转换为填充区域与原始描边相同的新路径。现在您有一个可填充区域,您可以将其用作剪裁区域。 CGContext 的方法是调用 replacePathWithStrokedPath
。正如文档明确所说:
For example, you can clip to the stroked version of a path by calling this function followed by a call to the function clip()
.
我有一个 CAShapeLayer
具有不透明描边和透明填充。然后我想调用 myContext.drawRadialGradient
,但是将这个径向渐变剪辑到我的形状层的笔划。目前,我正在调用 myShapeLayer.path.addClip()
,它将径向渐变剪裁到形状层的填充区域,而不是描边。
换句话说,我想使用只是图层的不透明部分或只是描边(同样的事情在我的例子中),并用它来剪辑当前上下文。我一直在搜索 CoreGraphics 文档一段时间但无济于事。
找到我的答案。您可以创建一个新的 UIBezierPath,它是现有 UIBezierPath 的副本,带有一笔,如下所示:
let strokePath = UIBezierPath(cgPath: oldPath.cgPath.copy(
strokingWithWidth: ..., lineCap: ..., lineJoin: ..., miterLimit: ...))
strokePath.addClip()
如果将形状图层添加为渐变图层的蒙版会怎么样?这应该有效,因为这是遮罩层应该做的。
如果这不起作用,您可能需要将形状层捕获到图像并将其安装为渐变层的蒙版。
将描边路径转换为填充区域与原始描边相同的新路径。现在您有一个可填充区域,您可以将其用作剪裁区域。 CGContext 的方法是调用 replacePathWithStrokedPath
。正如文档明确所说:
For example, you can clip to the stroked version of a path by calling this function followed by a call to the function
clip()
.