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 显示屏上的性能很差的主要内容,如果未能解决你的问题,请参考以下文章
iPad 视网膜模拟器中的 CATiledLayer 性能不佳