You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UIView超大尺寸快照无法渲染,输出全黑问题求助

问题:大尺寸UIView快照输出全黑,但视图实际包含内容

问题描述

对尺寸为(2384.0, 3370.3333333333335)的UIView进行快照时,输出结果为全黑,但视图内存在大量内容。

快照代码实现

extension UIView {
    var snapshot: UIImage {
        let renderer = UIGraphicsImageRenderer(size: bounds.size)
        let image = renderer.image { _ in
            drawHierarchy(in: self.bounds, afterScreenUpdates: false)
        }
        return image
    }
}

控制台报错信息

2023-04-24 08:09:21.348283+0200 Territories[3442:9511143] [Unknown process name] CGImageCreateMaskFromAlpha: Unsupported bitsPerComponent (16, must be 8) or bitsPerPixel (64, must be 32)
2023-04-24 08:09:21.630013+0200 Territories[3442:9511529] [Metal] 7152 by 10111 iosurface is too large for GPU

视图层级与调用代码

向视图层级中添加两个视图的代码如下:

addSubview(wrapperView)
wrapperView.backgroundColor = .orange        
wrapperView.snp.makeConstraints { maker in
    maker.leading.top.equalToSuperview()
    maker.width.equalTo(2384)
    maker.height.equalTo(3370)
}

wrapperView.addSubview(mapContainerView)
mapContainerView.backgroundColor = .red
mapContainerView.snp.makeConstraints { maker in
    maker.edges.equalToSuperview().inset(20)
}
let scale = 0.16359492667459377
wrapperView.transform = CGAffineTransform(scaleX: scale, y: scale)
wrapperView.snp.updateConstraints { maker in
    maker.leading.equalTo(-997)
    maker.top.equalTo(-1360)
}

屏幕显示效果

屏幕中正常显示橙色背景的wrapperView,内部包含红色的mapContainerView,视图内容完整可见。

快照调用位置

let document = PDFDocument()
let page = PDFPage(image: mainView.wrapperView.snapshot)!
document.insert(page, at: document.pageCount)

内容的提问来源于stack exchange,提问作者kunass2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:00:07