CATiledLayer PDF 在 iPad 3 Retina 显示屏上的性能很差

Posted

技术标签:

【中文标题】CATiledLayer PDF 在 iPad 3 Retina 显示屏上的性能很差【英文标题】:CATiledLayer PDF Performance is Poor on iPad 3 Retina Display 【发布时间】:2012-04-04 11:52:17 【问题描述】:

我正在使用相当简单的代码在滚动视图中显示可缩放的 PDF,并且它在 iPad 2 和原始 iPad 上运行良好。但在 iPad 3 上速度慢得惊人。我知道我在推动更多像素,但渲染性能简直无法接受。

ios 5.0 及更高版本中,tileSize 属性被任意限制在 1024,这意味着图块在视网膜显示屏上显示为该大小的一半。有没有人找到克服这个限制的方法?

否则,有没有人找到提高 iPad 3 上CATiledLayer 速度的方法?

【问题讨论】:

见***.com/questions/9691891/… Mat 指出的问题可以解决您的问题。查看所有答案,因为对于您的案例,有比已接受答案中存在的更好的解决方法。 谢谢,米海。不幸的是,该链接本身没有解决方法。只有一些调整。而那些大多是为模拟器而设计的,因此对于我们这些为适当的设备开发的人来说并不是必须感兴趣的。例如,一项调整建议将 contentScaleFactor 降低到 0.5,这会导致图层以 iPad 2(非视网膜)分辨率呈现。更快,是的,但对于运输产品是不可接受的。 两个建议:您可以创建一个小型演示项目和一个有代表性的 pdf 文件并将其发布到 Dropbox 上吗?此外,您可能希望提供赏金作为挖掘的动力。 您是否记得将视图的 contentScaleFactor 设置为 1(或等效地,图层的 contentScale?),最好在 -didMoveToWindow 中([super didMoveToWindow] 将其设置为当前屏幕的任何值)? 【参考方案1】:

您是否尝试在图层上将shouldRasterize 设置为YES

【讨论】:

嗯,是的 - 栅格化图层当然可以提高性能。但是光栅化消除了平铺图层的好处:在图像放大时重绘平铺。在任何大于 1.0 的缩放级别下,光栅化平铺看起来都很糟糕。【参考方案2】:

您是否对这些抽签运行了时间分析器并排除了重复抽签的可能性?

我有一些奇怪的双重绘图,很容易找到:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context

    NSLog(@"draw %@", NSStringFromCGRect(CGContextGetClipBoundingBox(context)));
    // draw pdf

还有多种设置可供选择:

tiledLayer.levelsOfDetail = 2 tiledLayer.levelsOfDetailBias = 4 tiledLayer.tileSize = self.bounds.size CGContextSetInterpolationQuality(context, kCGInterpolationLow) CGContextSetRenderingIntent(context, kCGRenderingIntentDefault) self.contentScaleFactor = 1.0

【讨论】:

以上是关于CATiledLayer PDF 在 iPad 3 Retina 显示屏上的性能很差的主要内容,如果未能解决你的问题,请参考以下文章

iOS CATiledLayer 崩溃

iPad 视网膜模拟器中的 CATiledLayer 性能不佳

为啥这个 CATiledLayer/PDF 代码很慢?

隐藏 CATiledLayer 平铺创建

如何保持 CALayer(CATiledLayer 的子层)在缩放后不改变其比例?

数据格式化程序暂时不可用,将在“继续”后重试