我們都知道,
在iphone/ipad顯示pdf的基本方法有兩個,乙個是使用uiwebview直接載入pdf檔案,另乙個是使用core graphics進行渲染(姑且稱之為cgpdf方法)
。uiwebview的方法是簡單,只需載入pdf,其他諸如放大翻頁等問題通通交給uiwebview去頭痛吧。但其缺點是效能較慢,功能有限,比如要實現搜尋,新增筆記等功能就比較難。而使用cgpdf方法,功能就沒有限制(雖然pdf解析方面,蘋果提供的文件實在有限),
使用core graphics進行渲染,效能上也比uiwebview要提高許多,只不過翻頁,放大縮小等功能都需要自己實現
。有關pdf放大縮小,翻頁等功能可以使用uiscrollview實現,不在本文討論的範圍之內。筆者在專案中使用了cgpdf的過程中,曾遇到兩個小問題,因此,在這裡總結一下:
先看看我程式中的渲染**,可以放在- (void)drawrect:(cgrect)rect 或者 -(void)drawlayer:(calayer*)layer incontext:(cgcontextref)context 中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 -(
void
)drawrect
:(cgrect
)rect
簡單地說,這段**就是使用core graphics進行pdf的渲染,可是我的pdf放大後為什麼不清晰呢?先看看放大pdf後可以使其清晰的部分**吧:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 -(
id)initwithpdfpage
:(pdfpage
*)page
return self;
}+(class
)layerclass
其秘訣就在catiledlayer,簡單地說就是catiledlayer將不同等級的tiles(拼貼)快取起來,而cgcontextdrawpdfpage則根據最合適的放大等級將pdf渲染出來。
根據文件catiledlayer可以更高效,高質量地渲染pdf文件,但我則遇到了第二個問題。
簡而言之就是pdf頁面一塊一塊地慢慢渲染出來,效果非常不好。這是怎麼回事?經過一番研究發現是catiledlayer的動畫效果在作怪。每個tile的渲染據說都有0.25s的動畫時間,其結果就是pdf文件一塊一塊地出現了。要怎樣解決這個問題呢?最為直接的方法就是把0.25s的動畫時間直接設定為0。下面是**(採用繼承catiledlayer的方法):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@inte***ce fastcatiledlayer
: catiledlayer
@end
@implementation fastcatiledlayer
+(cftimeinterval
)fadeduration
+(class
)layerclass
-(id)initwithpdfpage
:(pdfpage
*)page
return self;
}@end
注:pdfpage是我自己的乙個類。
from:
求職的小竅門
大學畢業季,回味之前幾年時光匆匆流逝,自己宛如一張白紙。就業 擇業 失業,接踵而來。就業 如汪洋大海,我猶如未起航的小船,停靠在溫暖的港灣。擇業 如汪洋大海中漂泊小船的風帆,迎風飄揚。失業 波濤洶湧的浪花拍打在猶弱的小船上,慢慢的吞噬。簡歷 面試 入職三部曲 簡歷 一般前程無憂 智聯招聘 如何吸引h...
啤酒調味的小竅門
由於啤酒富含營養,具有健脾開胃之功效,所以喜歡喝啤酒的人越來越多。啤酒除用於飲用外,對菜餚的調味也是發揮了一技之長呢。具體方法如下 炒肉片或肉絲,用澱粉加啤酒調糊掛漿,炒出後格外鮮嫩,味尤佳。烹製凍肉 排骨等菜餚,先用少量啤酒,醃漬10分鐘左右,清水沖洗後烹製,可除腥味和異味。烹製含脂肪較多的肉類 ...
前端學習的小竅門
1.data callback else json 第乙個是url,第二個是post時傳入的值,function中的data並不是傳入值,而是傳出值,function是對傳出值進行處理的函式,callback同樣是對傳出值處理的函式。因為js是非同步處理的,不能像同步時一樣可以return結果,只能...