转载自: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来管理资源文件相关推荐

  1. 【iOS开发】——MRC(手动内存管理)的一些补充

    [iOS开发]--MRC(手动内存管理)的一些补充 前言 野指针与空指针 多个对象内存管理的思想 玩家没有使用过房间 一个玩家使用一个游戏房间的情况 一个玩家使用一个房间 r 后,换到另一个房间 r2 ...

  2. iOS开发——MRC(手动内存管理)

    iOS开发--MRC(手动内存管理) 内存分配区域 栈区 堆区 总结 常量区 总结 代码区 总结 全局区 关于如何查看一个对象在堆区 / 栈区 需要知道的知识 手动引用计数MRC 四个法则 非自己生成 ...

  3. IOS开发基础之使用AFNetworking框架实现文件上传get和post请求

    IOS开发基础之使用AFNetworking框架实现文件上传get和post请求 AFNetworking框架 请自行从github官网clone.命令为 git clone xxx.xxx是项目的地 ...

  4. iOS开发证书、bundle ID、App ID、描述文件、p12文件,企业证书打包发布,及过期处理

    文章目录 1 .iOS开发证书,描述文件,bundle ID的关系 2. Apple开发账号添加团队成员 3 .开发证书,生产证书,描述文件,AppID关系及生成. 4.证书导出p12文件 5.描述文 ...

  5. iOS开发里的Bundle是个啥玩意?!

    初学iOS开发的同学,不管是自己写的,还是粘贴的代码,或多或少都写过下面的代码 [[NSBundle mainBundle] pathForResource:@"someFileName&q ...

  6. IOS开发系列—Objective-C之内存管理

    概述 我们知道在程序运行过程中要创建大量的对象,和其他高级语言类似,在ObjC中对象时存储在堆中的,系统并不会自动释放堆中的内存(注意基本类型是由系统自己管理的,放在栈上).如果一个对象创建并使用后没 ...

  7. iOS架构-静态库.a打包之资源文件打包成bundle(4)

    iOS架构-静态库.a的打包及使用(一) iOS架构-静态库.a的脚本化打包及使用(二) 资源文件主要包括:xib.图片以及其他文件资源(json.string等).这里主要介绍 xib.图片.其他的 ...

  8. iOS开发UI篇章之应用管理的九宫格坐标计算

    iOS开发UI篇-九宫格坐标计算 一.要求 完成下面的布局 二.分析 寻找左边的规律,每一个uiview的x坐标和y坐标. 三.实现思路 (1)明确每一块用得是什么view (2)明确每个view之间 ...

  9. BundleLoader:帮你无缝加载自定义Bundle里的资源文件

    引子 iOS开发中,我们封装SDK给第三方使用通常采用.a或.framework + .bundle的形式.相信封装过这种带bundle资源文件的SDK的同学们一定都会遇到这样一个小麻烦.那就是加载自 ...

  10. mac平台下用Xcode开发cocos2d-x3.6版本项目添加资源文件的注意事项

    之前一直都是在win32平台来开发cocos2d-x的项目,今天有时间把实验室的mac搭建一下cocos2d-x的开发环境.最新的mac os系统集成了python.java.Xcode等开发环境,基 ...

最新文章

  1. 参考框架 系统 基准_带有基准的前端框架的真实比较(2018更新)
  2. 补天白帽大会:无处不在的无线电攻击
  3. 4.4 Triplet 损失-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  4. 修改elementUI组件样式无效的问题研究
  5. Docker运行参数详解
  6. C ++ 的 背 影
  7. 携号转网全面启动后,新诈骗套路也跟上了!一招教你识别!
  8. 静态构造函数和静态成员变量初始化的调用时间
  9. HTML5 dataset遍历,H5中data-xxxx属性
  10. 公司采购 流程flowable例子
  11. 书单|互联网企业面试案头书之架构师篇
  12. llustrator 教程,如何在 Illustrator 中对齐内容?
  13. Hackintosh-OpenCore系列篇-Windows install
  14. 《论语》中关于“忧虑”的人生启示
  15. Map 和 ForEach 的区别
  16. 【BSV动态】VXPASS与世卫组织合作为莱索托提供数字疫苗监测服务
  17. html设置字体为5号,以下HTML代码中,哪一个是将词语“Run Away Bride”显示为Verdana字体并且字号为5号的正确代码?...
  18. 埃及通信和信息技术部使用 OpenText ECM 内容服务平台为电子政务转型奠定基础
  19. CMOS模拟集成电路摘要
  20. android 视频大小压缩,Android视频压缩(亲测有效)方便简单易用

热门文章

  1. cpci检索太慢_了解CPCI检索,对自己的好处
  2. java爬取双色球所有中奖号码历史数据
  3. php中html插入图片,html插入图片的示例代码详解(图)
  4. asp内乱码,注意不是ajax
  5. latex ctex 中文目录在pdf阅读器的“书签”选项卡中显示乱码的解决方法
  6. elasticsearch 使用
  7. 自然语言(NLP)处理流程—IF-IDF统计—jieba分词—Word2Vec模型训练使用
  8. Paypal快速支付接口参数的含义
  9. matlab仿真ssb调制解调,ssb调制解调原理
  10. 清华大学计算机系2016名单,清华大学2016年自主招生北京考生入选名单汇总