在將私有組件打成二進(jìn)制包的時(shí)候,我們可以選擇打包成 靜態(tài)庫 或者 動(dòng)態(tài)庫 , 靜態(tài)庫 和 動(dòng)態(tài)庫 讀取圖片的方式也略有不同,同時(shí)在私有組件里面指定資源的方式也分兩種,即 resources 和 resource_bundles ,下面做具體分析
奎屯網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
1.resources
使用 resources 來指定資源,被指定的資源只會(huì)簡(jiǎn)單的被 copy 到目標(biāo)工程中,如:
官方認(rèn)為用 resources 是無法避免每個(gè)庫和主工程之間的同名資源沖突,同時(shí),Xcode 也不會(huì)對(duì)這些資源做優(yōu)化。
2.resource_bundles
resource_bundles 允許定義當(dāng)前 Pod 庫的資源包的名稱和文件。用 hash 的形式來聲明,key 是 bundle 的名稱,value 是需要包括的文件的通配 patterns。比如:
CocoaPods 官方強(qiáng)烈推薦使用 resource_bundles,因?yàn)橛?key-value 可以避免每個(gè)庫和主工程之間的同名資源沖突
1.如果使用 resourses 指定資源:
讀取圖片可以直接從MainBundle讀?。?/p>
2.如果使用 resource_bundles 方式指定資源:
讀取圖片就要從自己的bundle讀取,也就是OTSDebugPluginsModule.bundle:
1.如果使用 resourses 指定資源:
圖片需要到自己的 frameWork 里的bundle讀?。?/p>
2.如果使用 resource_bundles 方式指定資源:
讀取圖片同樣也需要到 frameWork 里的bundle讀取,但是bundle名稱是OTSDebugPluginsModule.bundle:
后來試了一下不指定 OTSDebugPluginsModule.bundle 也行(注意:Xib和Storyboard不行,必須要指定OTSDebugPluginsModule.bundle):
動(dòng)態(tài)庫加載圖片:
針對(duì)動(dòng)態(tài)庫和靜態(tài)庫通過resource_bundles獲取資源,封裝了一個(gè)分類UIImage+OTSAssets.h:
1.動(dòng)態(tài)庫獲取資源
2.靜態(tài)庫獲取資源
方案一:通過bundle獲取
方案二:通過bundleName獲取
有了這個(gè)分類的話,在業(yè)務(wù)組件里面獲取圖片資源就很方便了,比如在登錄模塊OTSAccountModule:
聲明:
這樣就可以全局使用了:
基本上每個(gè)IOS APP都會(huì)有新手引導(dǎo)頁面這個(gè)功能,常規(guī)的就是幾張靜態(tài)圖片,可以左右滾動(dòng)。既然涉及到圖片,就肯定會(huì)存在適配的問題(為了達(dá)到最優(yōu)的體驗(yàn)效果,一般都會(huì)針對(duì)不同的分辨率設(shè)計(jì)不同尺寸的圖片),本文主要就是討論如何適配的問題。
2.1 方案一
根據(jù)屏幕分辨率的不同,使用不同的圖片。
2.2 ?方案二
熟悉IOS開發(fā)的人都知道,每一個(gè)ios項(xiàng)目中,都有一個(gè)Assets.xcassets文件夾,用來管理項(xiàng)目中所有的圖片(AppIcon、LaunchImage、其他業(yè)務(wù)圖片)。
從上面的截圖我們可以看到,xcode提供了兩個(gè)內(nèi)置的類型AppIcon、LaunchImage。我們只要提供正確尺寸的圖片,ios系統(tǒng)就能在不同分辨率的設(shè)備上使用對(duì)應(yīng)的圖片而無需我們自己指定;另外就是我們自己創(chuàng)建的(avatar),提供2x、3x這兩種類型的圖片即可(1x的設(shè)備現(xiàn)在基本上找不到了,而且當(dāng)前的ios系統(tǒng)也不支持1x的設(shè)備)。那么問題來了,我們自己創(chuàng)建的圖片集合,只有3個(gè)類型(1x、2x、3x),并不能按照分辨率來設(shè)定。再看一下上面的截圖,有一個(gè)“show”的圖片集合,形式如下:
咦!這個(gè)鬼東西是怎么搞出來的?我們先看看Assets.xcassets文件夾在硬盤上的組織形式:
從上圖我們可以看到,系統(tǒng)內(nèi)置的兩種類型AppIcon、LaunchImage對(duì)于的文件夾為AppIcon.appiconset、LaunchImage.launchimage,我們自己創(chuàng)建的圖片集合avatar對(duì)應(yīng)的文件夾為avatar.imageset。講到這里,你應(yīng)該大概猜到了show這個(gè)圖片集合是怎么創(chuàng)建出來了吧?
1、先創(chuàng)建一個(gè)LaunchImage類型的圖片集合;
2、修改名稱(LaunchImage→show)
3、修改文件夾名稱(show.launchimage→show.imageset)
回到正題,在show這個(gè)圖片集合里面,我們就可以輕松的根據(jù)分辨率設(shè)置2x、3x類型的圖片。
現(xiàn)在我們可以按照下圖的方式使用新手引導(dǎo)圖片了:
親測(cè):不同分辨率的設(shè)備,展示對(duì)應(yīng)的圖片。
我們注意到,show.imageset文件夾中有一個(gè)文件Contents.json,正是這個(gè)文件,ios系統(tǒng)才能根據(jù)設(shè)備類型展示對(duì)應(yīng)的圖片資源。Contents.json文件內(nèi)容如下:
系統(tǒng)展示圖片的時(shí)候,會(huì)先解析這個(gè)文件,然后根據(jù)設(shè)備的分辨率,找到對(duì)應(yīng)的圖片。
將css,html,js 所在的文件夾拖入項(xiàng)目的時(shí)候會(huì)有兩種情況
一個(gè)是 Create groups for any added folders (創(chuàng)建虛擬結(jié)構(gòu)-包結(jié)構(gòu))
一個(gè)是 Create folder references for any added folders (創(chuàng)建實(shí)體結(jié)構(gòu))
第一種是絕對(duì)路徑 文件夾拖入為黃色
NSURL*fileURL = [[NSBundle mainBundle] URLForResource:@"index.html"withExtension:nil];
本地html中加載圖片,js,css資源也應(yīng)該使用絕對(duì)路徑就行了
如 script type="text/javascript" src="index.js"/script
第二種是相對(duì)路徑 文件夾拖入為藍(lán)色
NSURL*fileURL = [[NSBundle mainBundle] URLForResource:@"file/index.html"withExtension:nil];
file為本地html所在文件夾
本地html中加載圖片,js,css資源也應(yīng)該使用相對(duì)路徑
如 script type="text/javascript" src="js/index.js"/script