Swift-使用3D变换从UIView获取UIImage

时间:2018-08-21 07:07:44

标签: ios swift core-graphics

我正在使用一个应用程序来编辑图像。 “编辑器”的平方为UIView,该视图具有一些子视图:

  • 背景UIImageView;
  • 一个或多个具有3d变换的叠加层。这些视图可以是UITextViewUIImageView

因此,当用户准备保存图像时,我计算出图像应比原始UIView大得多,以具有与原始背景图像相同的大小。

例如:如果背景图像为3750x3750,并且用户使用的是iPhone X(因此包装器UIView为375x375),则我的最终比例将为10。

因此,我需要从此UIView获取缩放后的图像。到目前为止,我尝试过的事情:

1-使用view.drawHierarchy(in: context)

如果我使用大小与UIView相同的上下文(在我的示例中为375x375),缩放比例为10,则最终图像将被像素化。实际上,无论我使用哪种规模,结果都是相同的。

我尝试将我的UIView缩放到最终大小,然后再使用比例尺1调用drawHierarchy(in:)方法,但这并不安全:适用于较小的图像,但是较大的图像会使得应用程序崩溃并显示内存警告。

2-使用view.layer.render(in: context)

使用UIView大小和所需的计算比例的上下文,这将以正确的分辨率渲染图像,而没有像素化,但是我的所有3D变换都将被丢弃。

在所有情况下,我都会相应地更新所有子视图(及其子视图和子层)的layer.contentScale

因此,我需要使用drawHierarchy(in:)方法来考虑计算的比例,或者使用view.layer.render(in:)方法来考虑子视图的3D转换。

我该如何实现?

谢谢!

0 个答案:

没有答案