经过前两篇文章的学习,相信对组件化开发有了大致的了解,那我们这篇文章就来讲讲资源文件的加载吧
经过前两篇文章的学习,相信对组件化开发有了大致的了解,那我们这篇文章就来讲讲资源文件的加载吧
这里我新建了一个LXFMain组件库,主要是用来显示TabBar的玩意,然后再进行组件化抽离出来,其中的过程这里不再赘述,还没了解过的同学建议先阅读下这两篇文章吧
这里跟之前不一样的地方在于多了图片资源,组件的核心代码放在Classes文件夹中,而图片我们则存放于Assets目录下,如图所示
一、修改Spec
将关于资源加载的注释去掉
Code
1 | s.resource_bundles = { |
回到LXFMain的模板库,我们进行一次本地的安装和测试(pod install
)
可以看到,图片资源也安装进来了,但是运行的效果如下图,图片并不能成功加载出来
二、修改加载资源代码
这是当前加载图片的相关代码
Code
1 | [UIImage imageNamed:@"图片名称"]; |
图片就在这个LXFMain.bundle
里面(这里就不截图看了),这里主要是让大家对这个目录结构有个了解
Code
1 | // load from main bundle |
可以看到,官方注释着imageNamed
加载的是main bundle中的资源,mainBundle的位置如下图
这样当然就无法加载到图片啦,我们需要让它加载自己当前所在bundle里的图片 ,所以加载图片的代码需要进行修改
objc
1 | NSString *normalImgName = @"个人@2x.png"; |
但是直接写LXFMain.bundle
并不好,不可控,所以还需要改进一下:
Code
1 | NSString *normalImgName = [NSString stringWithFormat:@"%@@2x.png", normalImg]; |
三、聊聊xib
Xib的加载也是如此
Code
1 | NSBundle *curBundle = [NSBundle bundleForClass:self.class]; |
不过xib中值得一提的是,如果是直接在xib中拖入一个imageView控件来设置图片的加载,我们则需要在图片名字前加上当前bundle名称
Code
1 | LXFMain.bundle/个人 |
这里除了当前xib要加载的图片不属于mainBundle这个原因之外,还有一点就是xib文件与bundle存放位置属于同一级别,故直接使用相对路径的方式,在图片名字前加上bundle名称即可。
四、遇到的小问题
Code
1 | [!] Unable to find a pod with name, author, summary, or description matching `lxfmain` |
我做完一切操作后发现搜索报上面那个错,解决方案是删除本地索引文件,然后再搜索一遍,系统会自动帮你再生成一切本地索引文件,然后就搞定了~
Code
1 | rm -rf ~/Library/Caches/CocoaPods/search_index.json |