当前位置: 首页 > news >正文

iOS 组件化开发(三):加载资源文件

经过前两篇文章的学习,相信对组件化开发有了大致的了解,那我们这篇文章就来讲讲资源文件的加载吧

这里我新建了一个LXFMain组件库,主要是用来显示TabBar的玩意,然后再进行组件化抽离出来,其中的过程这里不再赘述,还没了解过的同学建议先阅读下这两篇文章吧

iOS 组件化开发(一):远程私有库的基本使用

iOS 组件化开发(二):远程私有库的更新与子库

这里跟之前不一样的地方在于多了图片资源,组件的核心代码放在Classes文件夹中,而图片我们则存放于Assets目录下,如图所示

一、修改Spec

将关于资源加载的注释去掉

s.resource_bundles = {
 # 'LXFMain' => ['LXFMain/Assets/*.png']
 'LXFMain' => ['LXFMain/Assets/*']
}
复制代码

回到LXFMain的模板库,我们进行一次本地的安装和测试(pod install)

可以看到,图片资源也安装进来了,但是运行的效果如下图,图片并不能成功加载出来

二、修改加载资源代码

这是当前加载图片的相关代码

[UIImage imageNamed:@"图片名称"];
复制代码

右击显示包内容

图片就在这个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

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
复制代码

相关文章:

  • swift中利用系统线程实现异步加载数据同步更新UI
  • T56
  • pyqt5的下载进度条 实现模板
  • 用servlet校验密码2
  • PHP 生成唯一订单号函数
  • SSE图像算法优化系列二十九:基础的拉普拉斯金字塔融合用于改善图像增强中易出现的过增强问题(一)...
  • Confluence 6 LDAP 服务器配置
  • tp5.0中及其常用方法的一些函数方法(自己看)和技巧(不断添加中)
  • SpringBoot 从application.yml中通过@Value读取不到属性值
  • python开发环境
  • 网页排版布局--从里到外先搞定结构
  • 常见的Web安全及其攻防姿势
  • 利益相关者分析
  • 长春网站建设×××,网站制作的步骤
  • spring boot @ConfigurationProperties vs @Value
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • bearychat的java client
  • CSS中外联样式表代表的含义
  • Hexo+码云+git快速搭建免费的静态Blog
  • HTTP--网络协议分层,http历史(二)
  • Phpstorm怎样批量删除空行?
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • redis学习笔记(三):列表、集合、有序集合
  • ucore操作系统实验笔记 - 重新理解中断
  • vue 个人积累(使用工具,组件)
  • Vue UI框架库开发介绍
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 基于axios的vue插件,让http请求更简单
  • 面试总结JavaScript篇
  • 排序算法之--选择排序
  • 译自由幺半群
  • 优化 Vue 项目编译文件大小
  • 与 ConTeXt MkIV 官方文档的接驳
  • 正则学习笔记
  • elasticsearch-head插件安装
  • zabbix3.2监控linux磁盘IO
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (2020)Java后端开发----(面试题和笔试题)
  • (39)STM32——FLASH闪存
  • (js)循环条件满足时终止循环
  • (Oracle)SQL优化技巧(一):分页查询
  • (第61天)多租户架构(CDB/PDB)
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (四)汇编语言——简单程序
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (轉貼) UML中文FAQ (OO) (UML)
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .cn根服务器被攻击之后
  • .jks文件(JAVA KeyStore)
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Core使用NPOI导出复杂,美观的Excel详解