一、解决图片加载的问题:
- 图片放置的位置:
- 每个宿主工程都要用到的图片:放在外界,Images.xcassets,比如tabBar按钮的图片;
- 组件内用到的图片:放入对应的组件;
- 修改加载路径:
- 代码NSBundle和[UIImage imageNamed:@"tabbar_bg"];
- xib、storyboard加载图片路径
二、需要了解的知识:
获取图片的工具:
- iOSImagesExtractor ;
- cartool (在参数那里,前一个是输入路径,后一个是输出路径)。
组件化Bundle路径:
NSBundle *mainBundle = [NSBundle mainBundle];//主bundle
NSBundle *currentBundle = [NSBundle bundleForClass:self];//对应组件中的bundle
NSLog(@"mainBundle——>%@",mainBundle);
NSLog(@"currentBundle——>%@",currentBundle);
主Bundle(默认):mainBundle——>NSBundle </Users/fengluo/Library/Developer/CoreSimulator/Devices/1F8ABC0F-4C13-4E90-A11C-A2910F304687/data/Containers/Bundle/Application/F269A0A9-6DB4-4FDC-96B5-1B45ED1D7920/LFFMMain_Example.app> (loaded)
库对应的Bundle:currentBundle——>NSBundle </Users/fengluo/Library/Developer/CoreSimulator/Devices/1F8ABC0F-4C13-4E90-A11C-A2910F304687/data/Containers/Bundle/Application/F269A0A9-6DB4-4FDC-96B5-1B45ED1D7920/LFFMMain_Example.app/Frameworks/LFFMMain.framework> (loaded)
主Bundle和库对应的Bundle
三、操作步骤
- 准备图片:可以使用iOSImagesExtractor、cartool,或者别出找;
-
主骨架图片放在宿主工程的Images.xcassets,因为每个宿主工程都要用到;
-
组件特有的图片放入对应组件的Assets;
- 修改库中xib、storyboard中图片的加载路径:
LFFMMain.bundle/tabbar_np_shadow
,即在原来的图片名前面加上对应的bundleLFFMMain.bundle/
- 代码中Nib、图片资源加载:
- 涉及到NSBundle:
NSBundle *currentBundle = [NSBundle bundleForClass:self];
XMGMiddleView *middleView = [[currentBundle loadNibNamed:@"XMGMiddleView" owner:nil options:nil] firstObject];
- 涉及到
[UIImage imageNamed:@"tabbar_bg"]
NSBundle *currentBundle = [NSBundle bundleForClass:[self class]];
NSString *imagePath = [currentBundle pathForResource:@"tabbar_bg@2x.png" ofType:nil inDirectory:@"LFFMMain.bundle"];
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
self.backgroundImage = image;
####### 获取图片工具的使用
1.iOSImagesExtractor 的使用:
缺点是只能解压出@2x.png,解压不出@3x.png的图片
2.cartool 的使用
可以解压出@3x.png的图片,只是用法有点奇葩