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

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

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

image.png

这里有个注意的地方:

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

image.png

对应下图

image.png

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

image.png

对应下图

image.png

总的来说,步骤就是

  1. 把图片资源放到Assets目录下
  2. 修改podspec文件
  3. cd到example下,pod install把图片导入测试项目中,效果如图:
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 <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。
修改如下:

image.png
image.png

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

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

image.png

执行 pod install

image.png

运行如图

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近在学习vue.js的时候发现,vue的组件化的思想对于编写代码是一个非常有用的事情。 首先为什么需要组件化? ...
    拂晓的云阅读 12,006评论 6 23
  • 该文章属于刘小壮原创,转载请注明:刘小壮[https://www.jianshu.com/u/2de707c93d...
    刘小壮阅读 93,920评论 266 518
  • iOS的组件化,一直都是一个理念,很多大公司一直在强调却没有具体可行的或简单可行的方案。所以分享下大概思路。 框架...
    蝴蝶之梦天使阅读 10,712评论 14 34
  • 十月你好 你迈着矫健的步伐深情款款的走来 秋风和谐你轻松的节拍 你停留在枝桠间 俯身低语着你对绿叶的情谊 你驻足在...
    深深浅浅间阅读 786评论 0 0
  • 2018年1月4号,阅读第四天,读了20分钟,又开始写作业了,有进步了宝贝
    马佰慧阅读 1,209评论 0 0