I'm trying to render a CALayer
from SwiftSVG package (on github) as a UIImage
. It isn't working.
Source .svg file defines a viewBox 1169 x 1000.
If I add CALayer
to UIView
and add UIView
(not UIImage
) to view hierarchy, the SVG graphics are perfect, so CALayer
is fine.
I added renderer.cgContext
based drawing commands in the closure, to draw an outline around the rendering area. It worked. The resulting UIImage
had an outline drawn, proving the image renderer block itself works. Thus...
svgLayer.render()
does not render visible graphics in the produced image.
svgView.drawHierarchy()
doesn't work either (for example if I add the SVG layer as a sublayer of a view and try to render the view instead).
WORKS AND PRODUCES VALID CALAYER WITH PERFECT SVG GRAPHICS:
let viewBox : CGRect? = CGRectMake(0, 0, 116.9, 100)
let filename = (fieldKey + ".svg").lowercased()
let svgURL = gbl_svgDataUrl.appendingPathComponent(filename)
let svgLayer = CALayer(SVGURL: svgURL) { (svgLayer) in
svgLayer.fillColor = color.cgColor
if let viewBox {
svgLayer.resizeToFit(viewBox)
}
}
CAN GET DRAWN GRAPHICS INTO IMAGE BUT NOT RENDERED CALAYER OR VIEW:
let format = UIGraphicsImageRendererFormat.preferred()
format.opaque = false
let image = UIGraphicsImageRenderer(size: viewBox.size, format: format).image { renderer in
svgLayer.render(in: renderer.cgContext) // <-- DOESN'T WORK
//svgView.drawHierarchy(in: viewBox, // <-- DOESN'T WORK
// afterScreenUpdates: false)
}