通过前两篇文章的学习,相信对组件化开发有了大体的了解,那咱们这篇文章就来说讲资源文件的加载吧json
这里我新建了一个LXFMain组件库,主要是用来显示TabBar的玩意,而后再进行组件化抽离出来,其中的过程这里再也不赘述,还没了解过的同窗建议先阅读下这两篇文章吧bash
这里跟以前不同的地方在于多了图片资源,组件的核心代码放在Classes文件夹中,而图片咱们则存放于Assets目录下,如图所示post
将关于资源加载的注释去掉学习
s.resource_bundles = {
# 'LXFMain' => ['LXFMain/Assets/*.png']
'LXFMain' => ['LXFMain/Assets/*']
}
复制代码
回到LXFMain的模板库,咱们进行一次本地的安装和测试(pod install
)测试
能够看到,图片资源也安装进来了,可是运行的效果以下图,图片并不能成功加载出来ui
这是当前加载图片的相关代码spa
[UIImage imageNamed:@"图片名称"];
复制代码
右击显示包内容 3d
图片就在这个LXFMain.bundle
里面(这里就不截图看了),这里主要是让你们对这个目录结构有个了解
咱们对imageNamed
进行跳转到定义操做
// load from main bundle
复制代码
能够看到,官方注释着imageNamed
加载的是main bundle中的资源,mainBundle的位置以下图
这样固然就没法加载到图片啦,咱们须要让它加载本身当前所在bundle里的图片 ,因此加载图片的代码须要进行修改
NSString *normalImgName = @"我的@2x.png";
NSBundle *curBundle = [NSBundle bundleForClass:self.class]; // 获取当前bundle
NSString *normalImgPath = [curBundle pathForResource:normalImgName ofType:nil inDirectory:@"LXFMain.bundle"];
UIImage *normalImage = [UIImage imageWithContentsOfFile:normalImgPath];
复制代码
可是直接写LXFMain.bundle
并很差,不可控,因此还须要改进一下:
NSString *normalImgName = [NSString stringWithFormat:@"%@@2x.png", normalImg];
NSBundle *curBundle = [NSBundle bundleForClass:self.class];
// *********** 重点 *********** //
NSString *curBundleName = curBundle.infoDictionary[@"CFBundleName"];
NSString *curBundleDirectory = [NSString stringWithFormat:@"%@.bundle", curBundleName];
NSString *normalImgPath = [curBundle pathForResource:normalImgName ofType:nil inDirectory:curBundleDirectory];
// *************************** //
UIImage *normalImage = [UIImage imageWithContentsOfFile:normalImgPath];
复制代码
Xib的加载也是如此
NSBundle *curBundle = [NSBundle bundleForClass:self.class];
LXFCenterView *centerView = (LXFCenterView *)[curBundle loadNibNamed:@"LXFCenterView" owner:nil options:nil].firstObject;
centerView.frame = CGRectMake(30, 140, 200, 100);
[self.view addSubview:centerView];
复制代码
不过xib中值得一提的是,若是是直接在xib中拖入一个imageView控件来设置图片的加载,咱们则须要在图片名字前加上当前bundle名称
LXFMain.bundle/我的
复制代码
这里除了当前xib要加载的图片不属于mainBundle这个缘由以外,还有一点就是xib文件与bundle存放位置属于同一级别,故直接使用相对路径的方式,在图片名字前加上bundle名称便可。
虽然没法在xib上直接看到效果,不过确实是有效的
[!] Unable to find a pod with name, author, summary, or description matching `lxfmain`
复制代码
我作完一切操做后发现搜索报上面那个错,解决方案是删除本地索引文件,而后再搜索一遍,系统会自动帮你再生成一切本地索引文件,而后就搞定了~
rm -rf ~/Library/Caches/CocoaPods/search_index.json
pod search lxfmain
复制代码