以下是代码:
https://www.dropbox.com/s/o42wy36x4qhrbpt/PDFScroller.zip
我使用WWDC 2010 PhotoScroller
示例代码实现嵌套UIScrollViews
进行缩放,在UIScrollView
内进行分页,并换出我认为所需的最少量代码显示多页PDF而不是图像。
有效。但是我的iPhone4上的速度很慢,第一页画的时间大约是三秒钟,而我的iPod Touch则更慢。我可以看它画个别瓷砖。同样的PDF已经更快地打开,没有可见的平铺图,在我使用的另一个CATiledLayer
实现中,它只使用单个CATiledLayer
/ UIScrollView
并触摸事件来更改页面。我想使用这种PhotoScroller
技术,非常好。
我用仪器中的CPU Sampler观察它,它似乎不是PDF渲染代码,看起来时间在线程和消息传递中占用。如果有人可以帮助指出这个样本正在做什么来产生开销,我会很感激。
谢谢,
吉姆
更新1:我最初使用了定义
示例代码中的TilingView
类技术
+ (Class) layerClass {
return [CATiledLayer class];
}
然后绘制- (void)drawRect:(CGRect)rect
,但切换到显式CATiledLayer
子类,作为第一次尝试看它是否会产生影响,但事实并非如此,所以我将代码保留为原样在这里张贴TilingView中还缺少[tiledLayer release];
泄漏。
答案 0 :(得分:4)
有关PDF渲染提示,请参阅此主题Fast and Lean PDF Viewer for iPhone / iPad / iOs - tips and hints?。
答案 1 :(得分:2)
因为你的代码包含几个错误,我无法编译代码,但我看了一下存档中包含的PDF文件,我知道你的TilingView速度慢的原因。
通常,当您使用方法CGContext
:在CGContextDrawPDFPage
中绘制pdf页面时,所有文本和矢量图形都会被渲染,而PDF中的普通图形等其他内容只会被绘制和缓存。所以PDF文件有多大并不重要,但如果你的PDF中有矢量grahics,那就无所谓了。看来你的PDF中有一些矢量图形,还有一些数学方程式,这就是为什么它很慢的原因。我建议你尝试使用另一个不包含矢量图形的PDF文件,看它是否更快。
干杯
征
答案 2 :(得分:1)
猜测不得以任何形式授权:PDF 是大多数文档的基于矢量的格式(不包括那些仅用作嵌入式TIFF图像容器的格式)。因此,当您像PhotoScroller一样平铺PDF时,您基本上要求手机为每个单独的图块缩放和栅格化整个PDF(至少是给定页面)。因此,不是像对一个CATiledLayer那样绘制一次,而是为每个分辨率多次绘制它。由于PDF本身就是一种可扩展的格式,因此您应该能够为每个页面/比例简单地渲染整个视图。
更新:我自己完成了这项工作,PhotoScroller示例存在一些逻辑问题,导致速度非常慢。基本上它将每个图块渲染为1 / zoomScale,然后缩放比例缩小为zoomScale。因此,如果缩放位于.5,则渲染为 2x ,然后将其缩小至0.5x。效率很慢。