iPad 3 renderInContext慢 – 糟糕的渲染性能

我正在尝试从用户可以在其上绘制的视图中获取图像,或者添加其他视图。 随着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(); 

我知道这可能是由与ipad2相同的cpu引起的,但大约需要1秒。 用户绘制或添加的越多,渲染所需的时间就越长。 有时长达5秒,这是真的不能接受的。 那么有什么方法可以提高性能吗? 任何机会,可能会设置一个较小的渲染质量 – 我不需要在最高的视网膜分辨率渲染…

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

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

另外,如果你不需要alpha,你可以通过传递YES来获得一个小的速度提升。 我自己也没有计时。

在上下文中调用渲染之前,还可以通过修改上下文中的插值质量来提高渲染速度。 我可以通过改变比例因子来获得更高的速度。

当然,你可以同时使用,你不必将质量设置为None,Low仍然是对我的改进。

 CGContextSetInterpolationQuality(ctx, kCGInterpolationNone); 

此外,对于前面的答案中提到的比例因子,请确保您的新比例因子是原始的倍数,即如果屏幕比例为1.0,则应该做类似.5而不是.8的操作。 使用.8会导致渲染计算更多的信息(因为它不是一个平衡的规模),从而使其比使用1.0慢,因为。

当然,这不会是一个很好的解决scheme。