ios开发之使用bundle来管理资源文件
转载自:http://blog.csdn.net/kylinbl/article/details/9047209
(chenyong 将资源文件夹弄成bundle格式的特简单单,只需要把后缀名改成.bundle即可)
在ios开发中为了方便管理资源文件,可以使用bundle的方式来进行管理,比如kkgridview里就是把所需的图片文件全部放在一个bundle来管理的 .
切记目前iOS中只允许使用bundle管理资源文件和国际化信息,不支持代码的打包。
在xcode中只能够创建setting bundle,会默认创建一些配置文件,在xcode中无法直接删除,这也许不是我们需要的。
那么如何使用最简单的方法创建一个bundle呢?
1 创建一个文件夹
2 将该文件夹重命名为a.bundle
3 将a.bundle拖入到xcode中即可
当然这样处理之后,取图片之类的文件,使用的方法就不一样了,以取iphone_52x52.png图片为例:
NSString *bundlePath = [[NSBundle mainBundle].resourcePath stringByAppendingPathComponent:@"My.bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
UIImage *(^getBundleImage)(NSString *) = ^(NSString *n) {
return [UIImage imageWithContentsOfFile:[bundle pathForResource:n ofType:@"png"]];
};
UIImage *myImg = getBundleImage(@"iphone_52x52");
代码是蛮长一块,为了方便使用,我们可以写一个UIImage的类别,在类别中加入此方法,这样用起来就简单多了:
(chenyong因为用了categary,所以在制作静态库时需要注意那个 _all_load什么的。。。见上篇文章)
- (UIImage *)imagesNamedFromCustomBundle:(NSString *)imgName
{
NSString *bundlePath = [[NSBundle mainBundle].resourcePath stringByAppendingPathComponent:@"My.bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
NSString *img_path = [bundle pathForResource:imgName ofType:@"png"];
return [UIImage imageWithContentsOfFile:img_path];
}
调用方式:
UIImage * img = [self imagesNamedFromCustomBundle:@"iphone_52x52"];
测试了下,发现一点小问题,为了兼容retina屏,有iphone_52x52.png和iphone_52x52@2x.png,两张图片,
当我们用UIImage * img = [UIImage imageNamed:@"iphone_52x52"];这种方式取图片时,会根据你是不是retina屏
来返回不同的图片,如果这两张图你只提供了一张,那么也可以正常运行,只是图片会按比例进行拉伸。
在测试上面的imagesNamedFromCustomBundle方法时,提供两张图片和只提供iphone_52x52.png时,两种屏下面都正常,但如果只提供了iphone_52x52@2x.png这张图片,那么无论是普通屏还是retina屏,都会找不到图片。
调试分析了下,是在[bundle pathForResource:imgName ofType:@"png"];这里出了问题,返回的path都是nil,把上面的方法改成下面这样:
- (UIImage *)imagesNamedFromCustomBundle:(NSString *)imgName
{
NSString *bundlePath = [[NSBundle mainBundle].resourcePath stringByAppendingPathComponent:@"testLocalVirable.bundle"];
NSString *img_path = [bundlePath stringByAppendingPathComponent:imgName];
return [UIImage imageWithContentsOfFile:img_path];
}
调用方式改成:UIImage * img = [self imagesNamedFromCustomBundle:@"iphone_52x52.png"];//把扩展名加上了
这样在来测试,retina屏正常了,普通屏还是找不到图片。
分析了半天也没找到解决方法,知识还是有限啊,看来要去请教下大牛才行了;
现阶段的处理方法就是别偷懒,提供完整的两张图片就ok了。
这里有老外的一篇讲Resource Bundles的文章:http://www.cocoanetics.com/2012/05/resource-bundles/
粗略过了一遍,有些地方也没看懂,记下来,有空花时间好好看看。
bundle的本质就是一个文件夹。当然在iOS中还可以干很多事情,详细资料请参考:
https://developer.apple.com/library/ios/#documentation/CoreFoundation/Conceptual/CFBundles/AboutBundles/AboutBundles.html#//apple_ref/doc/uid/10000123i-CH100-SW7
ios开发之使用bundle来管理资源文件相关推荐
- 【iOS开发】——MRC(手动内存管理)的一些补充
[iOS开发]--MRC(手动内存管理)的一些补充 前言 野指针与空指针 多个对象内存管理的思想 玩家没有使用过房间 一个玩家使用一个游戏房间的情况 一个玩家使用一个房间 r 后,换到另一个房间 r2 ...
- iOS开发——MRC(手动内存管理)
iOS开发--MRC(手动内存管理) 内存分配区域 栈区 堆区 总结 常量区 总结 代码区 总结 全局区 关于如何查看一个对象在堆区 / 栈区 需要知道的知识 手动引用计数MRC 四个法则 非自己生成 ...
- IOS开发基础之使用AFNetworking框架实现文件上传get和post请求
IOS开发基础之使用AFNetworking框架实现文件上传get和post请求 AFNetworking框架 请自行从github官网clone.命令为 git clone xxx.xxx是项目的地 ...
- iOS开发证书、bundle ID、App ID、描述文件、p12文件,企业证书打包发布,及过期处理
文章目录 1 .iOS开发证书,描述文件,bundle ID的关系 2. Apple开发账号添加团队成员 3 .开发证书,生产证书,描述文件,AppID关系及生成. 4.证书导出p12文件 5.描述文 ...
- iOS开发里的Bundle是个啥玩意?!
初学iOS开发的同学,不管是自己写的,还是粘贴的代码,或多或少都写过下面的代码 [[NSBundle mainBundle] pathForResource:@"someFileName&q ...
- IOS开发系列—Objective-C之内存管理
概述 我们知道在程序运行过程中要创建大量的对象,和其他高级语言类似,在ObjC中对象时存储在堆中的,系统并不会自动释放堆中的内存(注意基本类型是由系统自己管理的,放在栈上).如果一个对象创建并使用后没 ...
- iOS架构-静态库.a打包之资源文件打包成bundle(4)
iOS架构-静态库.a的打包及使用(一) iOS架构-静态库.a的脚本化打包及使用(二) 资源文件主要包括:xib.图片以及其他文件资源(json.string等).这里主要介绍 xib.图片.其他的 ...
- iOS开发UI篇章之应用管理的九宫格坐标计算
iOS开发UI篇-九宫格坐标计算 一.要求 完成下面的布局 二.分析 寻找左边的规律,每一个uiview的x坐标和y坐标. 三.实现思路 (1)明确每一块用得是什么view (2)明确每个view之间 ...
- BundleLoader:帮你无缝加载自定义Bundle里的资源文件
引子 iOS开发中,我们封装SDK给第三方使用通常采用.a或.framework + .bundle的形式.相信封装过这种带bundle资源文件的SDK的同学们一定都会遇到这样一个小麻烦.那就是加载自 ...
- mac平台下用Xcode开发cocos2d-x3.6版本项目添加资源文件的注意事项
之前一直都是在win32平台来开发cocos2d-x的项目,今天有时间把实验室的mac搭建一下cocos2d-x的开发环境.最新的mac os系统集成了python.java.Xcode等开发环境,基 ...
最新文章
- 参考框架 系统 基准_带有基准的前端框架的真实比较(2018更新)
- 补天白帽大会:无处不在的无线电攻击
- 4.4 Triplet 损失-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
- 修改elementUI组件样式无效的问题研究
- Docker运行参数详解
- C ++ 的 背 影
- 携号转网全面启动后,新诈骗套路也跟上了!一招教你识别!
- 静态构造函数和静态成员变量初始化的调用时间
- HTML5 dataset遍历,H5中data-xxxx属性
- 公司采购 流程flowable例子
- 书单|互联网企业面试案头书之架构师篇
- llustrator 教程,如何在 Illustrator 中对齐内容?
- Hackintosh-OpenCore系列篇-Windows install
- 《论语》中关于“忧虑”的人生启示
- Map 和 ForEach 的区别
- 【BSV动态】VXPASS与世卫组织合作为莱索托提供数字疫苗监测服务
- html设置字体为5号,以下HTML代码中,哪一个是将词语“Run Away Bride”显示为Verdana字体并且字号为5号的正确代码?...
- 埃及通信和信息技术部使用 OpenText ECM 内容服务平台为电子政务转型奠定基础
- CMOS模拟集成电路摘要
- android 视频大小压缩,Android视频压缩(亲测有效)方便简单易用
热门文章
- cpci检索太慢_了解CPCI检索,对自己的好处
- java爬取双色球所有中奖号码历史数据
- php中html插入图片,html插入图片的示例代码详解(图)
- asp内乱码,注意不是ajax
- latex ctex 中文目录在pdf阅读器的“书签”选项卡中显示乱码的解决方法
- elasticsearch 使用
- 自然语言(NLP)处理流程—IF-IDF统计—jieba分词—Word2Vec模型训练使用
- Paypal快速支付接口参数的含义
- matlab仿真ssb调制解调,ssb调制解调原理
- 清华大学计算机系2016名单,清华大学2016年自主招生北京考生入选名单汇总