如何使用核心图形绘制带有自定义 pattern/image 的 line/stroke?

How to draw a line/stroke with custom pattern/image using core graphics?

我正在开发一个 pdf 注释应用程序,截至目前,我可以使用“PDFAnnotationSubtype.stamp”中的图像画一条线。

图片:

使用以下代码:

public class ImageAnnotation: PDFAnnotation{ 

 init(with image: UIImage!, forBounds bounds: CGRect, withProperties properties: [AnyHashable : Any]?) {
    super.init(bounds: bounds, forType: PDFAnnotationSubtype.stamp, withProperties: properties)

    self._image = image
}

override public func draw(with box: PDFDisplayBox, in context: CGContext) {
    guard let cgImage = self._image?.cgImage else { return }
    context.draw(cgImage, in: self.bounds)
}
}

结果:

使用这种方法,我最终在每个 CG 点添加图像(换句话说,每个 CG 点都是单独的 PDFAnnotation)。如何将整个路径作为单个 stroke/single 注释,这样当我尝试擦除时,应该清除整个路径而不是只有几个 cgpoint/pixels.

搜索了几个资源后发现我们可以使用“CGPattern”对线条进行纹理处理。

参考: https://developer.apple.com/documentation/coregraphics/cgpattern

对于尝试此操作的任何其他人,请确保使用“填充”和“描边”模式来玩弄“drawingPath”。