iPad 3 renderInContext慢 - 渲染性能不佳

时间:2012-07-11 14:44:03

标签: iphone ios ipad ipad-3

我正在尝试从用户可以绘制的视图中获取图像,或者添加一些其他视图。随着iPad1& 2到目前为止一切正常。 但在iPad3上它像狗一样运行。 我只是使用图层renderInContext方法。

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
    UIGraphicsBeginImageContextWithOptions(self.viewDrawableViewContainer.frame.size, NO, [UIScreen mainScreen].scale);
else
    UIGraphicsBeginImageContext(self.viewDrawableViewContainer.frame.size);
[self.viewDrawableViewContainer.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();   

我知道这可能是因为cpu等于ipad2的, 但它需要大约1秒钟。用户绘制或添加的越多,渲染所需的时间就越长。有时长达5秒,这是非常不可接受的。 那么有什么选择来提高性能吗? 有可能设置较小的渲染质量 - 我不需要在最高视网膜分辨率下渲染......

我将不胜感激任何帮助!提前致谢

2 个答案:

答案 0 :(得分:16)

在上下文中调用渲染之前,您还可以通过修改上下文中的插值质量来提高渲染速度。通过这种改变,我能够获得更高速度的截图,而不是通过改变比例因子。

当然你可以同时使用两种,你不需要将质量设置为无,低对我来说仍然是一个改进。

CGContextSetInterpolationQuality(ctx, kCGInterpolationNone);

此外,对于上一个答案中提到的比例因子,请确保您的新比例因子是原始比例的倍数,即如果屏幕比例为1.0,则应该执行.5而不是.8。使用.8将导致渲染器计算更多信息(因为它不是偶数比例),因此比使用1.0更慢。

当然,这对每个人来说都不是一个好的解决方案。

答案 1 :(得分:9)

您可以通过以较低分辨率渲染来提高速度。使用小于1.0的UIGraphicsBeginImageContextWithOptions比例因子,例如0.5。

另外,如果你不需要alpha,你可以通过为不透明标志传递YES来获得一个小的速度提升。我自己没有时间差异。