目前项目组件化已经告一段落,我把总结的相关文章列罗出来
创建cocoapod私有库详细步骤(基础组件组件化)
iOS组件化方案与实践:Target-Action
iOS组件化解决图片显示问题
xib文件如何组件化(cocoapod私有库)?
适合小白的iOS项目组件化完整详细流程,每步都有demo
pod trunk push使用
iOS项目组件化遇到的问题及解决(100%遇得到)
Cocoapods 更新索引库或者指定第三方
在组件化时,对于图片资源,我们需要把对应组件的图片资源放到对应组件如下位置:
这里有个注意的地方:
在上图Assets目录下是直接把相关图片导入进来还是在Assets下新建一个文件夹,再把图片导入到该文件夹,取决于podspec文件的下图位置:
对应下图
*****************************============**************************
对应下图
总的来说,步骤就是
- 把图片资源放到Assets目录下
- 修改podspec文件
- cd到example下,pod install把图片导入测试项目中,效果如图:
- 显示图片。
注意:
显示图片如果使用如下方式的话,是不能正常显示图片的
_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 <UIKit/UIKit.h>
@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。
修改如下:
下面验证并把podspec文件上传索引库
然后回到主工程WGLearnMTMediatorDemo
修改Podfile文件:
执行 pod install
运行如图