在这里默认你已经了解集成远程私有或者共有库了,如果不是很清楚,建议先看一下
教你一步步用CocoaPods创建远程公有库
教你一步步用CocoaPods创建远程私有库
在pods中使用图片资源有三种方式:
- 直接把图片放在Pods中,然后添加引用路径
- 把图片放在bundle中,添加引用路径
- 把图片放在Assets.xcassets中,添加引用路径
1、首先是先把图片资源添加到封装的库中
1.1、
1.2、修改.podSpec文件指定我们资源文件的路径
注意一下,最后一定是写*
因为我们的图片资源不一定只有png有可能还有jpg格式的。
2、加载图片的写法
我们一般加载图片的写法有两种
UIImage *image = [UIImage imageNamed:@"图片"];
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"图片" ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
但是发现这两种写法,都不能加载我们的私有库资源中的图片,上面的两种写法,倒是可以加载我们主项目中项目中的图片和Images.xcassets中的图片。
上面的两种写法,实际上是去加载的哪里的图片呢?
UIImage *image = [UIImage imageNamed:@"图片"];
这句话默认加载的是下面这两种图片,一种是我们直接拖到项目中的图片,一种是我们拖到Images.xcassets
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"图片" ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
这句话加载的则是我们直接拖到主项目中的图片。
我们添加到pod库中的图片去哪里了?
仔细看,我们的图片的位置是在一个单独的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是怎么加载图片的
当然了,也有这种做法,就是直接把所有的图片都存储在Assets.xcassets,然后远程私有库调用图片的时候和在主项目写法一致就可以了,但是这样的封装性貌似差点。不过没有最牛逼,只有最合适。
如有失误请各位路过大神即时指点,或有更好的做法,也请指点一二。在下不甚感激。