我有一个应用程序,可以将可变大小的UIView转换为UIImage。
问题是,当UIView太大时,UIGraphicsGetImageFromCurrentImageContext会崩溃。日志显示根本原因是操作系统内存不足。
这是我的代码:
public extension UIView {
func snapshotImage(rectangle: CGRect) -> UIImage? {
var image: UIImage?
autoreleasepool { () -> () in
UIGraphicsBeginImageContextWithOptions(rectangle.size,isOpaque,0.0)
defer { UIGraphicsEndImageContext() }
if let context = UIGraphicsgetcurrentContext() {
context.translateBy(x: -rectangle.origin.x,y: -rectangle.origin.y)
layer.render(in: context)
image = UIGraphicsGetImageFromCurrentImageContext()
}
}
return image
}
}
我尝试使用UIGraphicsImageRenderer,类似:
extension UIView {
func asImage() -> UIImage {
let renderer = UIGraphicsImageRenderer(bounds: bounds)
return renderer.image { rendererContext in
layer.render(in: rendererContext.cgContext)
}
}
}
使用UIGraphicsImageRenderer应用程序时不会崩溃,但是无法创建结果图像,因此结果无法使用。
关于如何解决将大型UIView正确转换为UIImage的任何想法?