通過前兩篇文章的學習,相信對組件化開發有了大體的瞭解,那咱們這篇文章就來說講資源文件的加載吧json
這裏我新建了一個LXFMain組件庫,主要是用來顯示TabBar的玩意,而後再進行組件化抽離出來,其中的過程這裏再也不贅述,還沒了解過的同窗建議先閱讀下這兩篇文章吧bash
這裏跟以前不同的地方在於多了圖片資源,組件的核心代碼放在Classes文件夾中,而圖片咱們則存放於Assets目錄下,如圖所示post
將關於資源加載的註釋去掉學習
s.resource_bundles = {
# 'LXFMain' => ['LXFMain/Assets/*.png']
'LXFMain' => ['LXFMain/Assets/*']
}
複製代碼
回到LXFMain的模板庫,咱們進行一次本地的安裝和測試(pod install
)測試
能夠看到,圖片資源也安裝進來了,可是運行的效果以下圖,圖片並不能成功加載出來ui
這是當前加載圖片的相關代碼spa
[UIImage imageNamed:@"圖片名稱"];
複製代碼
右擊顯示包內容 3d
圖片就在這個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的加載也是如此
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
複製代碼