美文网首页组件化组件化
iOS组件化解决图片显示问题

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

作者: wg刚 | 来源:发表于2018-05-21 17:48 被阅读0次

    目前项目组件化已经告一段落,我把总结的相关文章列罗出来
    创建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

    相关文章

      网友评论

        本文标题:iOS组件化解决图片显示问题

        本文链接:https://www.haomeiwen.com/subject/hthqjftx.html