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

目前项目组件化已经告一段落,我把总结的相关文章列罗出来
创建cocoapod私有库详细步骤(基础组件组件化)
iOS组件化方案与实践:Target-Action
iOS组件化解决图片显示问题
xib文件如何组件化(cocoapod私有库)?
适合小白的iOS项目组件化完整详细流程,每步都有demo
pod trunk push使用
iOS项目组件化遇到的问题及解决(100%遇得到)
Cocoapods 更新索引库或者指定第三方

在组件化时,对于图片资源,我们需要把对应组件的图片资源放到对应组件如下位置:

iOS组件化解决图片显示问题_第1张图片
image.png

这里有个注意的地方:

在上图Assets目录下是直接把相关图片导入进来还是在Assets下新建一个文件夹,再把图片导入到该文件夹,取决于podspec文件的下图位置:

iOS组件化解决图片显示问题_第2张图片
image.png

对应下图

iOS组件化解决图片显示问题_第3张图片
image.png

*****************************============**************************

iOS组件化解决图片显示问题_第4张图片
image.png

对应下图

iOS组件化解决图片显示问题_第5张图片
image.png

总的来说,步骤就是

  1. 把图片资源放到Assets目录下
  2. 修改podspec文件
  3. cd到example下,pod install把图片导入测试项目中,效果如图:
iOS组件化解决图片显示问题_第6张图片
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组件化解决图片显示问题_第7张图片
image.png
iOS组件化解决图片显示问题_第8张图片
image.png

下面验证并把podspec文件上传索引库

然后回到主工程WGLearnMTMediatorDemo
修改Podfile文件:

iOS组件化解决图片显示问题_第9张图片
image.png

执行 pod install

iOS组件化解决图片显示问题_第10张图片
image.png

运行如图

iOS组件化解决图片显示问题_第11张图片
image.png

你可能感兴趣的:(iOS组件化解决图片显示问题)