在這里默認你已經了解集成遠程私有或者共有庫了,如果不是很清楚,建議先看一下
教你一步步用CocoaPods創建遠程公有庫
教你一步步用CocoaPods創建遠程私有庫
在pods中使用圖片資源有三種方式:
- 直接把圖片放在Pods中,然后添加引用路徑
- 把圖片放在bundle中,添加引用路徑
- 把圖片放在Assets.xcassets中,添加引用路徑
1、首先是先把圖片資源添加到封裝的庫中
1.1、
image.png
1.2、修改.podSpec文件指定我們資源文件的路徑
image.png
注意一下,最后一定是寫*
因為我們的圖片資源不一定只有png有可能還有jpg格式的。
2、加載圖片的寫法
我們一般加載圖片的寫法有兩種
UIImage *image = [UIImage imageNamed:@"圖片"];
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"圖片" ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
但是發現這兩種寫法,都不能加載我們的私有庫資源中的圖片,上面的兩種寫法,倒是可以加載我們主項目中項目中的圖片和Images.xcassets中的圖片。
上面的兩種寫法,實際上是去加載的哪里的圖片呢?
image.png
UIImage *image = [UIImage imageNamed:@"圖片"];
這句話默認加載的是下面這兩種圖片,一種是我們直接拖到項目中的圖片,一種是我們拖到Images.xcassets
image.png
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"圖片" ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
這句話加載的則是我們直接拖到主項目中的圖片。
我們添加到pod庫中的圖片去哪里了?
image.png
image.png
仔細看,我們的圖片的位置是在一個單獨的bundle中的。
所以上面的兩種加載圖片的方式肯定是不行的
加載封裝到pod庫中圖片的正確姿勢是這樣的:
// 注意圖片名稱的格式,必須寫全 @2x 或者 @3x 后綴名都得寫
NSString *imageName = @"compose_photograph@2x.png";
// 獲取當前的bundle,self只是在當前pod庫中的一個類,也可以隨意寫一個其他的類
NSBundle *currentBundle = [NSBundle bundleForClass:[self class]];
// 獲取當前bundle的名稱
NSString *currentBundleName = currentBundle.infoDictionary[@"CFBundleName"];
// 獲取圖片的路徑
NSString *imagePath = [currentBundle pathForResource:imageName ofType:nil inDirectory:[NSString stringWithFormat:@"%@.bundle",currentBundleName]];
// 獲取圖片
UIImage *imageFile = [UIImage imageWithContentsOfFile:imagePath];
當然了方法不是唯一的,最快捷的參考辦法是參考其他的封裝的pod是怎么加載圖片的
image.png
當然了,也有這種做法,就是直接把所有的圖片都存儲在Assets.xcassets,然后遠程私有庫調用圖片的時候和在主項目寫法一致就可以了,但是這樣的封裝性貌似差點。不過沒有最牛逼,只有最合適。
如有失誤請各位路過大神即時指點,或有更好的做法,也請指點一二。在下不甚感激。