iOS 多個(gè)PDF的加載顯示

前言:

加載一個(gè)pdf本地文件很簡(jiǎn)單,使用UIWebView或者CGContextDrawPDFPage都可以實(shí)現(xiàn),但是要想多個(gè)PDF文件在一個(gè)ViewController上加載而又不失流暢該怎么辦呢?本文就來(lái)實(shí)現(xiàn)這一效果。

先看效果圖:
2016-12-06 21_37_26.gif

實(shí)現(xiàn)思路:

  1. 拿到每個(gè)PDF的頁(yè)數(shù),得到所有的PDF文件的總和 totalNum ,作為下標(biāo)的顯示數(shù)據(jù)。

  2. 每次翻頁(yè),記住當(dāng)前的頁(yè)數(shù)在全部頁(yè)數(shù)的位置。當(dāng)翻到第一個(gè)PDF文件的最后一頁(yè)時(shí),取出第二個(gè)PDF文件的第一頁(yè)作為下一頁(yè)展示,做無(wú)痕連接。

  3. 之后的展示同步驟2,尤其要注意:下標(biāo)是在累加的基礎(chǔ)上的結(jié)果。


技術(shù)要點(diǎn):

  1. 得到PDF文件的頁(yè)數(shù):
        NSString *filename = @"1.pdf";
        CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), (__bridge CFStringRef)filename, NULL, NULL);
        CGPDFDocumentRef pdfDocument = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
        CFRelease(pdfURL);
        NSInteger indexSum = CGPDFDocumentGetNumberOfPages(pdfDocument);

2.根據(jù)當(dāng)前顯示頁(yè)數(shù),判斷出當(dāng)前顯示的是第幾個(gè)文件,然后取出對(duì)應(yīng)的后續(xù)文件補(bǔ)充顯示,我使用的是取下限以及上限的方法。例如:文件一和文件二都有3頁(yè),如果當(dāng)前顯示為4,說(shuō)明到達(dá)了第二個(gè)文件的下限了,再往前翻頁(yè)就得取出第一個(gè)文件的最后一頁(yè)來(lái)顯示了。如果顯示到第6頁(yè)的話(huà),說(shuō)明到達(dá)第二個(gè)文件的上限了。接下來(lái)如果往后翻的話(huà)就要取出第三個(gè)文件的第一頁(yè)來(lái)補(bǔ)充了。

3.繪制PDF內(nèi)容需要使用CGContextDrawPDFPage,避免頁(yè)數(shù)太多的時(shí)候卡頓。

  
    CGContextRef context = UIGraphicsGetCurrentContext();
    //調(diào)整坐標(biāo)系
    CGContextTranslateCTM(context, 0.0, self.bounds.size.height);//先垂直下移height高度
    CGContextScaleCTM(context, 1.0, -1.0);//再垂直向上翻轉(zhuǎn)
    //繪制pdf內(nèi)容
    CGPDFPageRef pageRef = CGPDFDocumentGetPage(pdfDocument, page);
    CGContextSaveGState(context);
    CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(pageRef, kCGPDFCropBox, self.bounds, 0, true);
    CGContextConcatCTM(context, pdfTransform);
    CGContextDrawPDFPage(context, pageRef);
    CGContextRestoreGState(context);

github項(xiàng)目地址: https://github.com/xiaochenyi/PDFtest

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容