Search code examples
iosswiftpdfkitios-pdfkitios-pdfkit-outlines

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


Im working on a pdf annotation app, as of now i'm able to draw a line using image in "PDFAnnotationSubtype.stamp".

Image: enter image description here

using below code:

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)
}
}

Results: enter image description here

Using this method I end up adding image at every CGpoint(in other words every cgpoint is separate PDFAnnotation). How do I make the entire path as a single stroke/single annotation such that when I try to erase, the entire path should get cleared instead of only few cgpoint/pixels.


Solution

  • After searching for several resources found out we can use "CGPattern" to texture the line.

    Reference: https://developer.apple.com/documentation/coregraphics/cgpattern

    For any one else trying this make sure to play around "drawingPath" with "fill" and "stroke" modes.