2

我正在寻找这方面的例子,但在任何地方都找不到。

这很简单。我有一个带有一堆注释的 MkMapView。我可以很容易地打印出来。

也就是说,我还想从中生成一个 PDF 文档。内容会与打印的不同,所以我会以定制的方式绘制它。

然而,似乎缺乏关于如何做这件事的例子。我可以在我的视图中绘制几乎所有其他内容,但 MapKit 似乎遵循不同的规则。

我希望答案很简单,但缺乏例子让我怀疑它是否可能。

4

2 回答 2

1

使用以下代码创建图像:

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)")
    }
于 2021-10-23T05:40:45.027 回答
0

我尚未对其进行测试,但这就是我以编程方式截取视图的屏幕截图的方式......然后我将这些图像添加到 PDF 中:

UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);

[self drawRect:self.frame];

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

您将替换self为您正在处理的任何视图。同样,我还没有对此进行测试,但基本思想是创建一个新的图形上下文,然后告诉目标视图自己绘制,然后将所有图形上下文信息捕获到 UIImage 中。

于 2012-04-11T17:07:51.330 回答