如何将 UIView 转换为高分辨率的 UIImage?

hyo*_*uuu 2 uiview uiimage ios swift

关于如何将 UIView 转换为 UIImage,使用view.drawHierarchy(in:)view.layer.renderInContext(). 但是,即使将比例设置为设备比例,结果仍然是非常糟糕的分辨率。我想知道是否有办法将 UIView 转换为具有高分辨率和质量的 UIImage?

Gui*_*ate 5

您需要在每个子视图上设置正确的内容比例。

extension UIView {   
    func scale(by scale: CGFloat) {
        self.contentScaleFactor = scale        
        for subview in self.subviews {
            subview.scale(by: scale)
        }
    }

    func getImage(scale: CGFloat? = nil) -> UIImage {
        let newScale = scale ?? UIScreen.main.scale
        self.scale(by: newScale)

        let format = UIGraphicsImageRendererFormat()
        format.scale = newScale

        let renderer = UIGraphicsImageRenderer(size: self.bounds.size, format: format)

        let image = renderer.image { rendererContext in            
            self.layer.render(in: rendererContext.cgContext)
        }

        return image
    }
}
Run Code Online (Sandbox Code Playgroud)

要创建您的图像:

let image = yourView.getImage()
Run Code Online (Sandbox Code Playgroud)