ios创建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].resourcePathstringByAppendingPathComponent:@"My.bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
UIImage *(^getBundleImage)(NSString *) = ^(NSString *n) {
return [UIImage imageWithContentsOfFile:[bundle pathForResource:nofType:@"png"]];
};
UIImage *myImg = getBundleImage(@"iphone_52x52");
代码是蛮长一块,为了方便使用,我们可以写一个UIImage的类别,在类别中加入此方法,这样用起来就简单多了:
- (UIImage *)imagesNamedFromCustomBundle:(NSString *)imgName
{
NSString *bundlePath = [[NSBundle mainBundle].resourcePathstringByAppendingPathComponent:@"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].resourcePathstringByAppendingPathComponent:@"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中还可以干很多事情,详细资料请参考:
ios创建bundle的图片资源文件(转)的更多相关文章
- ios创建的sqlite数据库文件如何从ios模拟器中导出
为了验证数据库的结构,有的时候需要使用一些管理工具来直接查看sqlite数据库的内容,在windows下有sqlite3的专用工具下载,而在ios下也可以使用火狐浏览器的插件sqlitemanager ...
- ios 创建自己的.a文件
1:首先创建个 静态工程(Cocoa Touch Static Library); 方法名字,一定要暴露在.h文件中, 2:分别在模拟器环境和真机环境下 Analyze (shift+command+ ...
- ios 创建和绘画pdf文件 -转
转自:http://blog.csdn.net/ant1239/article/details/7761676 本方法为项目中画pdf的一个方法,画pdf,一共分为几步,1,获取地址,有两种获取地址方 ...
- iOS - 集成Bundle资源文件包
1.Bundle 文件 Bundle 文件,简单理解,就是资源文件包.我们将许多图片.XIB.文本文件组织在一起,打包成一个 Bundle 文件.方便在其他项目中引用包内的资源. Bundle 文件是 ...
- IOS源码封装成.bundle和.a文件,以及加入xib的具体方法,翻遍网络,仅此一家完美翻译!! IOS7!!(3) 完美结局
以上翻译有误解之处,现在简单做法如下: 经过深入研究,才感觉明白了内部机制,现在简单介绍于下,主要步骤:xcode5 创建库项目,删掉测试文件和默认创建的类,添加viewController类带xib ...
- ios开发证书,描述文件,bundle ID的关系
苹果为了控制应用的开发与发布流程,制定了一套非常复杂的机制.这里面的关键词有:个人开发者账号,企业开发者账号,bundle ID,开发证书,发布证书(又叫"生产证书"),开发描述文 ...
- 【转】ios开发证书,描述文件,bundle ID的关系
ios开发证书,描述文件,bundle ID的关系 苹果为了控制应用的开发与发布流程,制定了一套非常复杂的机制.这里面的关键词有:个人开发者账号,企业开发者账号,bundle ID,开发证书,发布 ...
- ios私钥证书和profile文件的创建方法
做过ios开发的朋友们,对ios私钥证书和profile文件(描述文件)可能并不陌生,可以通过mac电脑来创建,但是,假如我们是用H5开发工具开发的,我们没有mac电脑怎么创建证书呢? 目前H5打包用 ...
- 获取IOS bundle中的文件
在xcode中选择bundle中的文件,右键Show in Finder即可拷贝或删除文件.
随机推荐
- 浅谈全区全服架构的SNS游戏后台
版权声明:本文由梁本志原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/198 来源:腾云阁 https://www.qclo ...
- rand()和srand()GetTickCount函数用法
标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void):从srand (seed)中指定的seed开始 ...
- python读取指定内存的内容
import ctypes as ct t = ct.string_at(0x211000, 20) # (addr, size) print t 最好不要用解释性语言来开发底层,一般用C.
- hdu------(4302)Holedox Eating(树状数组+二分)
Holedox Eating Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- SharedPreferences详解
我们在开发软件的时候,常需要向用户提供软件参数设置功能,例如我们常用的微信,用户可以设置是否允许陌生人添加自己为好友. 对于软件配置参数的保存, 如果是在window下通常我们会采用ini文件进行保存 ...
- swfobject2.2
官方网址:http://blog.deconcept.com/swfobject/ Github地址:https://github.com/swfobject/swfobject 谷歌地址 貌似被和谐 ...
- 关于gridview 实现查询功能的方法
protected void btnSearch_Click(object sender, EventArgs e) { TestCon(); } protected void btnAllData_ ...
- Python中T-SNE实现降维
Python中T-SNE实现降维 from sklearn.manifold import TSNE from sklearn.datasets import load_iris from sklea ...
- 在Web中如何使用Windows控件(ActiveX)[转]
最近做的一个Web项目,需要在网页中播放摄像头采集的实时视频,我们已经有了播放视频的使用C#编写的windows控件,如何将其嵌入到网页中去了?这需要使用一种古老的技术,ActiveX. 1.将.Ne ...
- FZU 2216 The Longest Straight 模拟
题目链接:The Longest Straight 就是一个模拟就是这样,T_T然而当时恶心的敲了好久,敲完就WA了,竟然有这么简单的方法,真是感动哭了.......xintengziji...zhi ...