我正在寻找这方面的例子,但在任何地方都找不到。
这很简单。我有一个带有一堆注释的 MkMapView。我可以很容易地打印出来。
也就是说,我还想从中生成一个 PDF 文档。内容会与打印的不同,所以我会以定制的方式绘制它。
然而,似乎缺乏关于如何做这件事的例子。我可以在我的视图中绘制几乎所有其他内容,但 MapKit 似乎遵循不同的规则。
我希望答案很简单,但缺乏例子让我怀疑它是否可能。
使用以下代码创建图像:
let render = UIGraphicsImageRenderer(size: self.mapView.bounds.size)
let image = render.image { _ in
self.mapView.drawHierarchy(in: self.mapView.bounds, afterScreenUpdates: true)
}
然后您可以将此图像放入 PDF 中:
let imageView = UIImageView(image: image)
let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let outputFileURL = documentDirectory.appendingPathComponent("mapView.pdf")
print("URL:", outputFileURL) // When running on simulator, use the given path to retrieve the PDF file
let pdfRenderer = UIGraphicsPDFRenderer(bounds: mapView.bounds)
do {
try pdfRenderer.writePDF(to: outputFileURL, withActions: { context in
context.beginPage()
imageView.layer.render(in: context.cgContext)
})
} catch {
print("Could not create PDF file: \(error)")
}
我尚未对其进行测试,但这就是我以编程方式截取视图的屏幕截图的方式......然后我将这些图像添加到 PDF 中:
UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);
[self drawRect:self.frame];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
您将替换self
为您正在处理的任何视图。同样,我还没有对此进行测试,但基本思想是创建一个新的图形上下文,然后告诉目标视图自己绘制,然后将所有图形上下文信息捕获到 UIImage 中。