FAST和精益PDF查看器用于iPhone/iPad/IOS-提示和提示?
最近有很多关于绘制PDF的问题。
是的,您可以很容易地使用UIWebView
但这不能给出您期望的良好PDF查看器的性能和功能。
您可以绘制PDF页面。给一个卡莱尔或到UIImage..苹果甚至有示例代码来展示如何绘制一个大的PDF在可缩放的UIScrollview中
但同样的问题不断出现。
UIImage方法:
- PDF在一个
UIImage
不要像用图层法那样进行光学缩放。 - CPU和内存在生成
UIImages
从PDFcontext
限制/防止使用它来创建新的缩放级别的实时呈现。
CATILedLayer法:
- 有一个很大的开销(时间)将完整的PDF页绘制到
CALayer
:可以看到单个瓷砖的呈现(即使是平铺大小的调整)。 CALayers
不能提前准备(在屏幕外呈现)。
一般来说,PDF阅读器的内存也很重。甚至监控苹果的可缩放PDF示例的内存使用情况。
在我当前的项目中,我正在开发一个PDF查看器,并呈现一个UIImage
一个单独的线程中的页面(这里也有问题!)在刻度为x1的时候呈现出来。CATiledLayer
一旦渲染的比例大于1,iBooks就会采用类似的双取方式,就像滚动页面一样,在清晰的版本出现之前,您可以在不到一秒钟的时间内看到页面的较低分辨率版本。
我呈现每页2页的焦点,这样PDF图像就可以在开始绘图之前掩盖图层,当页面离焦点页面+2页时,页面就会再次被销毁。
有没有人有任何洞察力,无论多小或多明显,都能提高PDF的性能/内存处理能力吗?或者这里讨论的其他问题?
编辑:一些小贴士(信用-卢克·麦克奈斯,维德梅德·T,马特·加拉格尔,约翰):
可以时将任何媒体保存到磁盘。
如果在平铺上渲染,请使用更大的平铺尺寸
在经常使用占位符对象的数组中,另一种设计方法是这一个
注意,图像呈现速度比CGPDFPageRef
使用NSOperations
或GCD&砌块提前准备页面。
打电话CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh); CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);
以前CGContextDrawPDFPage
减少绘图时的内存使用
在你的NSOperations
使用docRef是个坏主意(内存),将docRef包装成一个单例。
取消不必要NSOperations
当你可以的时候,特别是如果他们要使用内存的话,小心不要让上下文打开!
回收页面对象并销毁未使用的视图
在不需要任何开放上下文时立即关闭它们
接收内存警告释放和重新加载DocRef和任何页面缓存
其他PDF功能:
文献资料
示例项目