绘制 UIView 并转换为 UIImage

Posted

技术标签:

【中文标题】绘制 UIView 并转换为 UIImage【英文标题】:Draw UIView with transform into UIImage 【发布时间】:2018-07-31 15:18:27 【问题描述】:

使用drawHierarchy(in: afterScreenUpdates:)CALayer.render 方法很容易将UIView 绘制成UIImage,例如:

let renderer = UIGraphicsImageRenderer(size: size)
return renderer.image  rendererContext in
    view.drawHierarchy(in: view.frame, afterScreenUpdates: true)

但我想渲染UIView,包括它的变换和/或其层的变换。我怎样才能做到这一点?我需要渲染一个经过缩放和旋转的UIView

一种备用解决方案是将其超级视图呈现为UIImage,但为此我将不得不更改 UI 层次结构...

【问题讨论】:

【参考方案1】:

有解决此问题的方法。将带有变换的UIView 包装到另一个带有“变换视图”的frame 的视图(没有变换)。将转换后的视图放在包装视图中的.zero 位置并调用drawHierarchy(in:)(在包装视图上)。

或者在我的特定情况下,我需要绘制文本视图,最后我直接使用 Core Graphics 绘制文本。

【讨论】:

以上是关于绘制 UIView 并转换为 UIImage的主要内容,如果未能解决你的问题,请参考以下文章

iOS:如何将 UIView 的自绘内容转换为图像(普遍的通用解决方案返回空白图像)?

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

使用自动布局将自定义 UIView 绘制为背景并将其居中

如何在 UIView 上绘制一个 NSString 数组,它们之间没有任何前导空格并占据整个矩形?

如何使用 Quartz 在 UIView 上绘制子视图

将 UIView 坐标转换为横向