iOS開發APP瘦身之靈活的PDF圖檔資源加載架構
簡述:本文介紹的是一個用于在iOS項目中高效加載PDF矢量圖示(尺寸可以無限放大)的工具。
我們知道在 Xcode 6 及以上版本可以在 Asset Catalog 中使用 PDF 格式的矢量圖資源。
【引用】
大緻上,PDF是矢量元素的事實标準。矢量檔案包含一個元素的很多中繼資料,用來告訴系統如何渲染這些内容,而這些和螢幕分辨率無關。舉個通俗易懂例子,一個圓形的矢量PDF圖,當它渲染成像素寬和渲染成像素寬時是一樣清晰的。
在iOS平台,Xcode是在編譯時,根據你的矢量PDF圖的大小,生成x、x和x圖。如果你的PDF圖是*px,那麼Xcode會在編譯時生成下面個PNG:
*px :x裝置用的(iPhone G and GS)
*px :x或Retina顯示裝置用的(iPhone , S, , S, and )
*px :x裝置用的(iPhone Plus 及以上)
這也意味着當有更高的螢幕分辨率時,Xcode可以根據已有的矢量PDF放大圖檔,這樣自動就支援以後的裝置了。還有,如果你是OS X開發者,那麼矢量PDF就更好用了,OS X app完全支援矢量PDF,你可以用代碼縮放圖檔而不會失真。
想了解上述全部内容請猛戳傳送門:4個你需要知道的Asset Catalog的秘密
使用 PDF 作為圖示素材資源具有如下優點:
1. APP 瘦身
我們對比一下最近設計部門的朋友剛導出的某個圖示的一套正常的 PNG 圖檔和 PDF 類型的圖檔的大小:
PDF 檔案大小為 7KB
PNG 三個檔案合計大小為 85KB
對比結果: PDF 類型的檔案大概占空間為傳統 PNG 類型的 8%(以目前資源為依據,不同資源對比結果可能會有部分出入)。
2. 便于維護
首先就是設計部門出圖就會比之前友善很多,直接導出矢量檔案即可,并且如果後期再需要 4X、5X… 規格的圖,不需要對之前的圖示再返工處理。
再者作為開發者在管理圖檔相關的添加、替換、移除等重複性的操作維護壓力可以降低。
3. 可以無限放大
由于 PDF 圖示檔案為矢量圖,不同于之前的傳統的位圖,在放大之後可以依然保持清晰而非模糊毛邊有像素顆粒感。
例如,後期需求調整要求某一個按鈕互動熱區變大,相應圖示也要放大。如果使用之前 PNG 類型的資源,需要設計重新再出一套圖(作為一個嚴謹的程式員,當然不能夠容忍模糊圖示的存在��),但無形中這些都是開發過程中的時間成本。
想想如果使用 PDF 類型的資源直接改變一下圖示大小不就可以了嗎?那就直接行動,但是最後發現在 Asset Catalog 就算使用了 PDF 類型的圖放大後還是模糊了。為什麼呢?原來 Xcode 在編譯的時候隻是依據目前裝置所需要的資源隻自動生成1X、2X和3X規格的位圖類型的圖檔,那麼在後期通過隻改變控件的大小來希望圖檔精度也動态的調整自然是行不通了。
由此就産生了 YHPDFImageLoader 這個工具,
它旨在解決上述後期動态調整放大圖檔發虛的問題,與系統調用加載圖檔相容,并具有三級加載兩級緩存功能,以減少重複性質的運算并提高加載效率
,下面是一張加載效果對比圖:
YHPDFImageLoader 用法
當然,使用 YHPDFImageLoader 依然可以使用 .bundle 資源檔案包或者檔案夾的形式管理 PDF 素材資源(雖然蘋果聲稱使用 Asset Catalog 後 APP 的相關資源可以有效的防盜,但是目前仍可輕而易舉的提取出裡面的内容)。
另外,YHPDFImageLoader 同樣支援使用 CocoaPods 內建:
* 在 Podfile 檔案中添加:
pod 'YHPDFImageLoader'
* 執行 pod install 指令
使用方式:
- 第一步:
- 第二步:
UIImage *image = [UIImage yh_imageNamed:@"pdfName"];
- That’s all.
效果展示(源檔案圖檔分辨率為 30x46 ,大小為 7KB)