gpt4 book ai didi

ios - "[CALayer renderInContext]"在 iPhone X 上崩溃

转载 作者:行者123 更新时间:2023-11-29 00:04:41 29 4
gpt4 key购买 nike

我有一个自定义的 UIView,我想将其呈现为 UIImage。自定义 UIViewUIImageView 的子类。

在此 View 中,我正在渲染一些 UI 元素(在图像上绘制一堆圆圈)。添加的圈数最多可达数千个。

我正在使用这个简单的代码片段将 View 呈现为 UIImage:

// Create the UIImage (code runs on the main thread inside an @autorelease pool)
UIGraphicsBeginImageContextWithOptions(viewToSave.image.size, viewToSave.opaque, 1.0);
[viewToSave.layer renderInContext:UIGraphicsGetCurrentContext()];
imageToSave = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

// Since I'm rendering some stuff inside the .layer of the UIView,
// I don't think I can use "drawViewHierarchyInRect: afterScreenUpdates:"

这是从 Instruments 中获取的内存分配,在一个添加了约 3000 个圆作为 subview 的示例中:

MEMORY ALLOCATIONS (HEAP + ANONYMOUS VM)

现在这是奇怪的部分......运行正常,我可以多次(连续)渲染图像并将其保存在 iPhone 5、iPhone 5s、iPhone 6s、iPad Air 2、iPad Mini 等设备上的图库中4...但是相同的代码在 iPhone X 上触发内存警告并最终使应用程序崩溃...

很遗憾,我没有 iPhone X,而报告此事的人也没有 Mac,所以我无法进行更深入的调查。

我真的不知道我做错了什么......你知道 iPhone X 是否有什么不同之处吗?我已经为这个问题苦苦挣扎了一段时间......

最佳答案

我想这个问题与 CALayer:renderInContext: 如何在需要按比例放大的上下文中处理数千个 View 的绘制有关。是否可以尝试自己渲染 subview ?然后使用仪器比较和验证它是否工作得更好。

UIImage *imageToSave = [self imageFromSubLayer:viewToSave];

- (UIImage *)imageFromSubLayers:(UIImageView *)imageView {
CGSize size = imageView.image.size;
UIGraphicsBeginImageContextWithOptions(size, YES, .0);
CGContextRef context = UIGraphicsGetCurrentContext();
for (CALayer *layer in imageView.layer.sublayers)
[layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return image;
}

关于ios - "[CALayer renderInContext]"在 iPhone X 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48446465/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com