美文网首页
iOS组件化图片处理

iOS组件化图片处理

作者: 换不掉头像的丸子 | 来源:发表于2019-05-27 23:57 被阅读0次

最近公司在做组件化,在处理图片的时候,遇到一些问题,所以记录一下!组件化图片有两种处理方式,第一种是直接创建一个.bundle文件夹,(直接创建一个空文件夹,改名.bundle,然后将图片拖进去,但是这样有不好的地方是,没法适配2x,3X图片)

podspec文件里设置

s.resource_bundles = {

     'MyOrderModule' => ['MyOrderModule/Assets/MyOrderModule.bundle']

   }

这样会有两层bundle,因为外层就会生成一个bundle

+(UIImage*)getImageWithImageName:(NSString *)imageNamebundle:(NSString*)bundleNametargetClass:(Class)targetClass{

    NSIntegerscale = [[UIScreenmainScreen] scale];

    NSBundle*bundle = [NSBundlebundleForClass:targetClass];

    NSURL*url = [bundleURLForResource:bundleNamewithExtension:@"bundle"];

    NSBundle*targetBundle = [NSBundlebundleWithURL:url];

    NSString*imgName = [NSStringstringWithFormat:@"%@@%zdx.png",imageName,scale];

    UIImage *image = [UIImage imageNamed:imgName inBundle:targetBundle compatibleWithTraitCollection:nil];

    return (image)? (image):(([UIImage imageNamed:imgName inBundle:[NSBundle mainBundle] compatibleWithTraitCollection:nil])?([UIImage imageNamed:imgName inBundle:[NSBundle mainBundle] compatibleWithTraitCollection:nil]):([UIImage new]));

}

调用的地方使用

 UIImage *iamage = [self getImageWithImageName:@"aaa" bundle:@"'MyOrderModule.bundle/MyOrderModule" targetClass:[self class]];

第一个是podspec,前面写的bundle名字 后面的是工程里放图片的bundle名字  targetClass 名字一定要和bundle在同一个组件内,否则会取不到图片

2.第二种方式是Assets文件夹里直接放入Assets.xcassets(自己创建一个Assets,随便起名字)

修改.podspec文件如下:

s.resource_bundles = {

    'MyOrderModule' =>  ['MyOrderModule/Assets/Assets.xcassets']

  }

然后pod install

就会看到多了一个Resources文件夹,里面放着Assets文件

- (UIImage*)getImageWithImageName:(NSString*)imageNamebundleName:(NSString*)bundleNametargetClass:(Class)targetClass{

    NSBundle*bundle = [NSBundlebundleForClass:targetClass];

    NSURL*url = [bundleURLForResource:bundleNamewithExtension:@"bundle"];

    NSBundle*targetBundle = [NSBundlebundleWithURL:url];

    UIImage *image = [UIImage imageNamed:imageName inBundle:targetBundle compatibleWithTraitCollection:nil];

    return image?image:[UIImage imageNamed:imageName inBundle:[NSBundle mainBundle] compatibleWithTraitCollection:nil];

}

外面使用 

 UIImage *iamage = [self getImageWithImageName:@"aaa" bundle:@"'MyOrderModule" targetClass:[self class]];

这个是只会生成一个bundle,就是podspec里面设置的那个bundle

相关文章

网友评论

      本文标题:iOS组件化图片处理

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