4
适用于iPhone / iPad / iOS的Fast and Lean PDF Viewer-提示和提示?
最近有许多关于绘制PDF的问题。 是的,您可以使用轻松渲染PDF,UIWebView但这不能提供您期望的优质PDF查看器所具有的性能和功能。 您可以将PDF页面绘制到CALayer或UIImage。苹果甚至提供了示例代码来展示如何在Zoomable UIScrollview中绘制大型PDF 但是同样的问题不断出现。 UIImage方法: PDF UIImage不像图层方法那样光学缩放。 CPU和内存击中产生UIImages从PDFcontext 使用它来创建一个实时渲染的新的放大级别限制/防止。 CATiledLayer方法: 将整个PDF页面绘制到上有大量开销(时间)CALayer:可以看到各个图块的呈现(即使使用tileSize进行了调整) CALayers 无法提前准备(在屏幕外渲染)。 通常,PDF查看器也占用大量内存。甚至监视苹果可缩放PDF示例的内存使用情况。 在我当前的项目中,我正在开发PDF查看器,并UIImage在单独的线程中渲染页面的A(此处也有问题!),并在比例为x1时显示它。CATiledLayer比例大于1时,渲染就会开始。iBooks采用类似的重复处理方法,就好像您滚动页面一样,在显示清晰版本之前,可以看到页面的较低分辨率版本不到一秒钟。 我在页面的每一侧都渲染了2页,以便PDF图像准备好在开始绘制之前掩盖该层。当页面距聚焦页面+2页时,页面将再次被销毁。 是否有任何见解,无论大小或明显程度如何提高Drawing PDF的性能/内存处理能力?还是这里讨论的任何其他问题? 编辑:一些技巧(信贷-卢克·麦克尼斯,VdesmedT,马特·加拉格尔,约翰): 尽可能将任何媒体保存到磁盘。 如果在TiledLayers上渲染,请使用更大的tileSize INIT频繁使用的阵列,占位符对象,alternitively另一设计方法是这一个 请注意,图像的渲染速度比 CGPDFPageRef 使用NSOperations或GCD和块来提前准备页面。 CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh); CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);之前调用CGContextDrawPDFPage以减少绘图时的内存使用量 用docRef初始化您的NSOperations主意(内存)是一个坏主意,将docRef包装为单例。 不需要NSOperations时取消可以的话,尤其是当他们将使用内存时,请当心不要打开上下文! 回收页面对象并销毁未使用的视图 不需要任何打开的上下文后,立即关闭它们 在收到内存警告时释放并重新加载DocRef和任何页面缓存 其他PDF功能: 在PDF中获取链接(以及此处和此处) 了解PDF矩形以进行链接定位 转换PDF注释日期字符串 获取链接的目标(从/Dest数组中获取页码) 获取目录 文件标题和关键词 获取原始文本(以及此处,此处和此处(定位重点)) 搜索(和在此处)(不适用于所有PDF(有些只是显示奇怪的字符,我想这是编码问题,但不确定)-Credit BrainFeeder) CALayer和屏幕外渲染 -渲染下一页以实现快速/流畅的显示 文献资料 Quartz PDFObjects(用于元信息,注释,拇指) …