在屏幕外渲染 uiview 以捕获为 uiimage

Posted

技术标签:

【中文标题】在屏幕外渲染 uiview 以捕获为 uiimage【英文标题】:rendering a uiview offscreen to capture as a uiimage 【发布时间】:2020-07-15 21:35:09 【问题描述】:

在我正在编写的个人 swift 应用程序中,我正在使用图表库来创建条形图并将它们显示在视图控制器中。到目前为止一切正常。现在我想创建其他图表,将它们捕获为 uiimage 以包含在 PDF 表单中...不显示图表。图表库创建了一个 uiview,我尝试了许多建议。 post1,还有这个post2,但运气不佳...

此代码有效,但强制我显示图表

    resourceBarChart.updateDataEntries(dataEntries: resChartData, animated: false)
    self.view.addSubview(resourceBarChart)
    let myimage1 = self.view.subviews[1].image(withScale: .native)

省略uiview的显示

    resourceBarChart.updateDataEntries(dataEntries: resChartData, animated: false)
    let myimage = resourceBarChart.image(withScale: .native)

返回一个空的画布。我尝试使用隐藏的属性,但没有运气(也许正如预期的那样)。作为新手,我怀疑我忽略了一个微妙之处,并愿意接受任何建议

【问题讨论】:

【参考方案1】:

在将视图捕获为 UIImage 之前尝试使用drawHierarcy

resourceBarChart.drawHierarchy(in: resourceBarChart.bounds, afterScreenUpdates: true)

【讨论】:

非常感谢...它成功了!虽然我收到了这条消息[Snapshotting] View (0x7fc7a0d398d0, myApp.BasicBarChart) drawing with afterScreenUpdates:YES inside CoreAnimation commit is not supported. 我不太确定该消息,也许您可​​以更改调用 drawHierarchy 函数的位置

以上是关于在屏幕外渲染 uiview 以捕获为 uiimage的主要内容,如果未能解决你的问题,请参考以下文章

将 SwiftUI 视图渲染到屏幕外并将视图另存为 UIImage 以共享

在iOS7中将屏幕内容捕获为UIImage

如何将任何UIView渲染为UIImage [关闭]

UIView 的快照视图在上下文中渲染/绘制,没有任何内容

如何捕获用于过渡的屏幕截图

在屏幕上显示从相机捕获的图像时的混乱