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

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

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

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

【问题讨论】:

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

标签: ios ipad pdf catiledlayer retina-display


【解决方案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

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 2016-07-21
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多