将UIView转换为UIImage会导致大视图崩溃

我有一个应用程序,可以将可变大小的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的任何想法?

heshenzhi0622 回答:将UIView转换为UIImage会导致大视图崩溃

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2975771.html

大家都在问