經過前兩篇文章的學習,相信對元件化開發有了大致的瞭解,那我們這篇文章就來講講資原始檔的載入吧
這裡我新建了一個LXFMain元件庫,主要是用來顯示TabBar的玩意,然後再進行元件化抽離出來,其中的過程這裡不再贅述,還沒了解過的同學建議先閱讀下這兩篇文章吧
這裡跟之前不一樣的地方在於多了圖片資源,元件的核心程式碼放在Classes資料夾中,而圖片我們則存放於Assets目錄下,如圖所示
一、修改Spec
將關於資源載入的註釋去掉
s.resource_bundles = {
# 'LXFMain' => ['LXFMain/Assets/*.png']
'LXFMain' => ['LXFMain/Assets/*']
}
複製程式碼
回到LXFMain的模板庫,我們進行一次本地的安裝和測試(pod install
)
可以看到,圖片資源也安裝進來了,但是執行的效果如下圖,圖片並不能成功載入出來
二、修改載入資原始碼
這是當前載入圖片的相關程式碼
[UIImage imageNamed:@"圖片名稱"];
複製程式碼
右擊顯示包內容
圖片就在這個LXFMain.bundle
裡面(這裡就不截圖看了),這裡主要是讓大家對這個目錄結構有個瞭解
我們對imageNamed
進行跳轉到定義操作
// load from main bundle
複製程式碼
可以看到,官方註釋著imageNamed
載入的是main bundle中的資源,mainBundle的位置如下圖
這樣當然就無法載入到圖片啦,我們需要讓它載入自己當前所在bundle裡的圖片 ,所以載入圖片的程式碼需要進行修改
NSString *normalImgName = @"個人@2x.png";
NSBundle *curBundle = [NSBundle bundleForClass:self.class]; // 獲取當前bundle
NSString *normalImgPath = [curBundle pathForResource:normalImgName ofType:nil inDirectory:@"LXFMain.bundle"];
UIImage *normalImage = [UIImage imageWithContentsOfFile:normalImgPath];
複製程式碼
但是直接寫LXFMain.bundle
並不好,不可控,所以還需要改進一下:
NSString *normalImgName = [NSString stringWithFormat:@"%@@2x.png", normalImg];
NSBundle *curBundle = [NSBundle bundleForClass:self.class];
// *********** 重點 *********** //
NSString *curBundleName = curBundle.infoDictionary[@"CFBundleName"];
NSString *curBundleDirectory = [NSString stringWithFormat:@"%@.bundle", curBundleName];
NSString *normalImgPath = [curBundle pathForResource:normalImgName ofType:nil inDirectory:curBundleDirectory];
// *************************** //
UIImage *normalImage = [UIImage imageWithContentsOfFile:normalImgPath];
複製程式碼
三、聊聊xib
Xib的載入也是如此
NSBundle *curBundle = [NSBundle bundleForClass:self.class];
LXFCenterView *centerView = (LXFCenterView *)[curBundle loadNibNamed:@"LXFCenterView" owner:nil options:nil].firstObject;
centerView.frame = CGRectMake(30, 140, 200, 100);
[self.view addSubview:centerView];
複製程式碼
不過xib中值得一提的是,如果是直接在xib中拖入一個imageView控制元件來設定圖片的載入,我們則需要在圖片名字前加上當前bundle名稱
LXFMain.bundle/個人
複製程式碼
這裡除了當前xib要載入的圖片不屬於mainBundle這個原因之外,還有一點就是xib檔案與bundle存放位置屬於同一級別,故直接使用相對路徑的方式,在圖片名字前加上bundle名稱即可。
雖然無法在xib上直接看到效果,不過確實是有效的
四、遇到的小問題
[!] Unable to find a pod with name, author, summary, or description matching `lxfmain`
複製程式碼
我做完一切操作後發現搜尋報上面那個錯,解決方案是刪除本地索引檔案,然後再搜尋一遍,系統會自動幫你再生成一切本地索引檔案,然後就搞定了~
rm -rf ~/Library/Caches/CocoaPods/search_index.json
pod search lxfmain
複製程式碼