我正在使用一个应用程序来编辑图像。 “编辑器”的平方为UIView
,该视图具有一些子视图:
UIImageView
; UITextView
或UIImageView
。因此,当用户准备保存图像时,我计算出图像应比原始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转换。
我该如何实现?
谢谢!