iOS组件化解决图片显示问题

目前项目组件化已经告一段落,我把总结的相关文章列罗出来
创建cocoapod私有库详细步骤(基础组件组件化)
iOS组件化方案与实践:Target-Action
iOS组件化解决图片显示问题
xib文件如何组件化(cocoapod私有库)?
适合小白的iOS项目组件化完整详细流程,每步都有demo
pod trunk push使用
iOS项目组件化遇到的问题及解决(100%遇得到)
Cocoapods 更新索引库或者指定第三方
在组件化时,对于图片资源,我们需要把对应组件的图片资源放到对应组件如下位置:
iOS组件化解决图片显示问题
文章图片
image.png 这里有个注意的地方:
在上图Assets目录下是直接把相关图片导入进来还是在Assets下新建一个文件夹,再把图片导入到该文件夹,取决于podspec文件的下图位置:
iOS组件化解决图片显示问题
文章图片
image.png 对应下图
iOS组件化解决图片显示问题
文章图片
image.png *****************************============**************************
iOS组件化解决图片显示问题
文章图片
image.png 对应下图
iOS组件化解决图片显示问题
文章图片
image.png 总的来说,步骤就是
  1. 把图片资源放到Assets目录下
  2. 修改podspec文件
  3. cd到example下,pod install把图片导入测试项目中,效果如图:
iOS组件化解决图片显示问题
文章图片
image.png
  1. 显示图片。
注意: 显示图片如果使用如下方式的话,是不能正常显示图片的
_imgView.image = [UIImage imageNamed:@"Group@%2x.png"];

原因是这种方式默认是从mainBundle中去加载图片,然而组件化之后,图片已经不再mainBundle中了,实际是在对应组件下的bundle 里面。
解决办法:
NSBundle *currentBundle = [NSBundle bundleForClass:[self class]]; //图片名称要写全称 NSString *patch = [currentBundle pathForResource:@"Group.png" ofType:nil inDirectory:@"wgPersonInfoKit.bundle"]; _imgView.image = [UIImage imageWithContentsOfFile:patch];

因为修改的地方会很多,所以把这个方法抽出来:
新建一个UIImage的分类
#import @interface UIImage (wgBundle)+ (instancetype)wg_imgWithName:(NSString *)name bundle:(NSString *)bundleName targetClass:(Class)targetClass; @end

#import "UIImage+wgBundle.h"@implementation UIImage (wgBundle)+ (instancetype)wg_imgWithName:(NSString *)name bundle:(NSString *)bundleName targetClass:(Class)targetClass{ NSInteger scale = [[UIScreen mainScreen] scale]; NSBundle *curB = [NSBundle bundleForClass:targetClass]; NSString *imgName = [NSString stringWithFormat:@"%@@%zdx.png", name,scale]; NSString *dir = [NSString stringWithFormat:@"%@.bundle",bundleName]; NSString *path = [curB pathForResource:imgName ofType:nil inDirectory:dir]; return path?[UIImage imageWithContentsOfFile:path]:nil; }@end

在使用的地方:
_imgView.image = [UIImage wg_imgWithName:@"Group" bundle:@"wgPersonInfoKit" targetClass:[self class]];

到这里就已经完成图片资源的显示问题,不过应该把这个分来放到基础组件之中.
如果已经有了基础组件,则修改基础组件即可;
如没有,则需要新建基础组件,请参考基础组件组件化
如果使用我的demo的话,可以看到我修改了wgPersonInfoKit组件的podspec索引文件,因为该组件需要用到上个UIImage的分类, 我把这个分类组件化了,名称为wgCommonKit。
修改如下:
iOS组件化解决图片显示问题
文章图片
image.png iOS组件化解决图片显示问题
文章图片
image.png 下面验证并把podspec文件上传索引库
然后回到主工程WGLearnMTMediatorDemo
修改Podfile文件:
iOS组件化解决图片显示问题
文章图片
image.png 执行 pod install
iOS组件化解决图片显示问题
文章图片
image.png 【iOS组件化解决图片显示问题】运行如图
iOS组件化解决图片显示问题
文章图片
image.png

    推荐阅读