我想使用下面的代码将我的UIView转换为UIImage。renderincontext内存泄漏,如果不在主线程上使用
+ (UIImage *) imageWithView:(UIView *)view{
float scale = 1.0f;
UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, scale);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
view.layer.contents = nil;
return img;
}
这个代码有两个问题。
1.当我运行在后台线程(!mainThread)
我遇到的内存泄漏问题时renderInContext被称为后台线程的代码。
2.当我运行主线程的代码
没有内存泄漏,但在iPad 3,我面临着一些性能问题(我的UI挂起时调用此方法),而从UIView的创建图像。因为我需要在一秒钟内将此函数调用5次以上,所以UI挂起会给用户带来非常糟糕的体验。
请指导我如果我在这里做错了什么?
你见过我的示例代码吗? 'outputImage'是一个CGImageRef,你可以通过'imageWithCGImage:'创建一个'UIImage' - 但是你应该在主线程上做最后一步... – sergio
我觉得有混乱,我想将UIView到UIImage。 –
ouch ...你是对的...请看我编辑的代码。这应该做到这一点。 – sergio