【问题标题】:iPad 3 renderInContext slow - Bad rendering performanceiPad 3 renderInContext 慢 - 渲染性能差
【发布时间】:2012-07-11 05:19:39
【问题描述】:

我正在尝试从用户可以绘制的视图中获取图像,或者添加一些其他视图。到目前为止,使用 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 秒,这实在令人无法接受。 那么有没有什么办法可以提高性能呢? 任何可能设置较小渲染质量的机会 - 我不需要以最高视网膜分辨率进行渲染...

如果有任何帮助,我将不胜感激!提前致谢

【问题讨论】:

  • 你能预料会得到什么观点吗?如果是这样,您可以在后台进行绘图并缓存结果,这不会冻结设备。
  • 好的,谢谢你的提示,我可以在后台创建一个图像,但问题是,用户可能会写一些文本然后点击 go。然后我必须在用户交互后立即进行绘图,因为点击 go 后视图将关闭。但是谢谢,也许我可以在结束动画执行时渲染。我试一试……那么没有其他方法可以提高渲染性能了吗?
  • 不幸的是,没有,在基本相同的 CPU 上生产 4 次,因为许多像素只会降低性能。用动画掩盖它是解决问题的好方法,这也是 Apple 的做法。如果您允许用户绘制视图,那么您要绘制什么?是否没有 UIImage 支持您可以立即拉出而不是将视图渲染到上下文的视图?
  • 用户可以画出他喜欢的任何东西。它就像一支手指铅笔,您可以在其中绘制您想要的任何东西。此外,他还可以添加注释,以便通过键盘输入一些文本...

标签: iphone ios ipad ipad-3


【解决方案1】:

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

此外,如果您不需要 alpha,则可以通过为 opaque 标志传递 YES 来获得小的速度提升。我自己还没有计时。

【讨论】:

  • 试过这个。我用 NSDate *d1 = [NSDate 日期]; ... NSDate *d2 = [NSDate 日期]; [d2 timeIntervalSinceDate: d1];测量需要多长时间,没有区别。 iPad 3 比 iPad2 慢得多(~0.3 秒到~1.7 秒)
【解决方案2】:

您还可以通过在上下文中调用渲染之前修改上下文中的插值质量来提高渲染速度。与更改比例因子相比,我能够通过此更改获得更快的屏幕截图速度。

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

CGContextSetInterpolationQuality(ctx, kCGInterpolationNone);

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

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

【讨论】:

  • CGContextSetInterpolationQuality 创造了美好的事物!在我的情况下,我正在渲染UICollectionView 层,其中包含单元格中的图像 - 将高插值质量更改为中/低帧率,当滚动非常显着时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 2011-07-23
相关资源
最近更新 更多