iOS 多個PDF的加載顯示

前言:

加載一個pdf本地文件很簡單祝沸,使用UIWebView或者CGContextDrawPDFPage都可以實(shí)現(xiàn)笙什,但是要想多個PDF文件在一個ViewController上加載而又不失流暢該怎么辦呢堵幽?本文就來實(shí)現(xiàn)這一效果垫释。

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

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

  1. 拿到每個PDF的頁數(shù)拓挥,得到所有的PDF文件的總和 totalNum 菇爪,作為下標(biāo)的顯示數(shù)據(jù)算芯。

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

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


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

  1. 得到PDF文件的頁數(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)前顯示頁數(shù),判斷出當(dāng)前顯示的是第幾個文件奖亚,然后取出對應(yīng)的后續(xù)文件補(bǔ)充顯示淳梦,我使用的是取下限以及上限的方法。例如:文件一和文件二都有3頁昔字,如果當(dāng)前顯示為4爆袍,說明到達(dá)了第二個文件的下限了,再往前翻頁就得取出第一個文件的最后一頁來顯示了作郭。如果顯示到第6頁的話陨囊,說明到達(dá)第二個文件的上限了。接下來如果往后翻的話就要取出第三個文件的第一頁來補(bǔ)充了夹攒。

3.繪制PDF內(nèi)容需要使用CGContextDrawPDFPage,避免頁數(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)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市咏尝,隨后出現(xiàn)的幾起案子压语,更是在濱河造成了極大的恐慌,老刑警劉巖编检,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胎食,死亡現(xiàn)場離奇詭異,居然都是意外死亡允懂,警方通過查閱死者的電腦和手機(jī)厕怜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蕾总,“玉大人粥航,你說我怎么就攤上這事∩伲” “怎么了躁锡?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長置侍。 經(jīng)常有香客問我映之,道長,這世上最難降的妖魔是什么蜡坊? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任杠输,我火速辦了婚禮,結(jié)果婚禮上秕衙,老公的妹妹穿的比我還像新娘蠢甲。我一直安慰自己,他們只是感情好据忘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布鹦牛。 她就那樣靜靜地躺著搞糕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪曼追。 梳的紋絲不亂的頭發(fā)上窍仰,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音礼殊,去河邊找鬼驹吮。 笑死,一個胖子當(dāng)著我的面吹牛晶伦,可吹牛的內(nèi)容都是我干的碟狞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼婚陪,長吁一口氣:“原來是場噩夢啊……” “哼族沃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泌参,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤脆淹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后及舍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體未辆,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窟绷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年锯玛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兼蜈。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡攘残,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出为狸,到底是詐尸還是另有隱情歼郭,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布辐棒,位于F島的核電站病曾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏漾根。R本人自食惡果不足惜泰涂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辐怕。 院中可真熱鬧逼蒙,春花似錦、人聲如沸寄疏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驳棱,卻和暖如春批什,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蹈胡。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工渊季, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人罚渐。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓却汉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親荷并。 傳聞我的和親對象是個殘疾皇子合砂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容