美文网首页iOS开发之常用技术点
组件化开发之如何加载图片资源

组件化开发之如何加载图片资源

作者: 大兵布莱恩特 | 来源:发表于2018-08-15 17:00 被阅读72次

加载图片时候 如果不使用bundle 会使组件内部的图片名和工程main.bundle图片资源出现冲突 ,如果使用了新建的 bundle 存放资源 则可以解决图片资源冲突问题 ,但是却出现了另一个问题 那就是 xib 无法加载图片,必须在 xib 使用图片资源时候 需要知道 budle路径+图片名

image.png

这样在 xib 上无法查看图片资源 即使运行程序时候 能够加载出来图片资源 但对于 xib 布局有所影响 ,因为UIImageView UIbutton 可以根据图片尺寸 自适应控件的宽度和高度.

如果不使用 NSBundle 直接将图片资源添加到组件内部 ,那么在编译完成后 图片名 会被存放在 main.bundle 中 ,无疑会将与存放在宿主工程里的图片名 发生冲突,即使使用 .xcassets 也会被合并到 main.budle目录中Asset.car 文件中


image.png

为了既可以在 xib 中显示图片资源 ,又能避免组件内部图片和 main.bundle下图片资源冲突,可以将 组件内部的xib 和组件内部图片资源 放到同一个 budle 文件夹下 ,这样 xib 读取图片是 xib 所在 bundle 文件夹下边的图片.就可以在 xib 上直接显示该图片

  s.resource_bundles = {
      'AppraiseModule' => ['AppraiseModule/Resources/**/*.png','AppraiseModule/Classes/**/*.{xib}']
  }

如果你使用了代码去加载 xib 时候 需要

    NSBundle *mainBundle = [NSBundle mainBundle];
    NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"AppraiseModule" ofType:@"bundle"]];
    FRPublishAppraiseViewController *publishVC = [[FRPublishAppraiseViewController alloc] initWithNibName:@"FRPublishAppraiseViewController" bundle:resourcesBundle];
    [self presentViewController:publishVC animated:YES completion:nil];

如果你使用代码加载图片

    NSBundle *mainBundle = [NSBundle bundleForClass:[self class]];
    NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"AppraiseModule" ofType:@"bundle"]];

[UIImage imageNamed:@"report_triangle_passer" inBundle: resourcesBundle compatibleWithTraitCollection:nil]

相关文章

网友评论

本文标题:组件化开发之如何加载图片资源

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