使用CocoaPods集成的远程私有公有库如何使用图片资源

在这里默认你已经了解集成远程私有或者共有库了,如果不是很清楚,建议先看一下
教你一步步用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,然后远程私有库调用图片的时候和在主项目写法一致就可以了,但是这样的封装性貌似差点。不过没有最牛逼,只有最合适。

如有失误请各位路过大神即时指点,或有更好的做法,也请指点一二。在下不甚感激。

推荐阅读更多精彩内容