iOS8正确访问mainBundle和自定义Bundle中子文件夹资源文件NSBundle

iOS8出来很久了,由于生意和工作的原因,一直没有仔细研究,最近空了下来,写一下最近碰到的一个小坑,希望对大家在NSBundle这一个东西上有所帮助,看清楚mainBundle中访问资源和自定义Bundle中访问资源的差别所在。

PS:本文涉及到控件的摆放,不清楚Auto Layout的同学,可以自已看一下苹果的官方文档和WWDC的视频,百度出来的这些教程,我实在受不了。。。最后还是自已硬啃英文文档才理解的。

请大家仔细理解标红的代码。

demo下载链接:http://pan.baidu.com/s/1kT9wUNl

进入正题:

一、新建一个Single View  Application工程,点击Next

 

iOS8正确访问mainBundle和自定义Bundle中子文件夹资源文件NSBundle_第1张图片

二、项目名称TestBundle,主要演示mainBundle和自定义Bundle的区别。

iOS8正确访问mainBundle和自定义Bundle中子文件夹资源文件NSBundle_第2张图片

 

三、准备两组6张图,M表示Mainbundle加载的图片,C表示自定义Bundle加载的图片,分别命名为M.png,[email protected],[email protected]和C.png,[email protected],[email protected]

M和C的1倍尺寸为60*60,@2x和@3x尺寸对应放大倍数即可

大家如果没有图的话,可以直接下载demo压缩包并解压,找到上述6张图片。

iOS8正确访问mainBundle和自定义Bundle中子文件夹资源文件NSBundle_第3张图片

 

四、将图片放入对应的文件夹中,并添加到项目中,新建Group,命名为images,然后将上述图片添加到images这个组,如下图

iOS8正确访问mainBundle和自定义Bundle中子文件夹资源文件NSBundle_第4张图片

 

五、Storyboard中的设置iOS8正确访问mainBundle和自定义Bundle中子文件夹资源文件NSBundle_第5张图片

 

六、ViewController.h中,将UIImageView连线并命名为imageMainBundle

@property (weak, nonatomic) IBOutlet UIImageView *imageMainBundle;

然后在ViewController.m中编辑viewDidLoad函数

– (void)viewDidLoad {
[super viewDidLoad];

// imageNamed:这个方法加载图片会有缓存,不适于大图片加截,建议频繁加载同一个小图片的操作时使用。
// UIImage *imgM = [UIImage imageNamed:@”M”];
// [_imageMainBundle setImage:imgM];

// 加载Mainbundle中的图片,推荐使用imageWithContentsOfFile:这个方法来加载图片,至于区别,请自行百度
NSString *strM = [[NSBundle mainBundle] pathForResource:@”M” ofType:@”png”];
UIImage *imgM = [UIImage imageWithContentsOfFile:strM];
[_imageMainBundle setImage:imgM];
}

运行后的效果图如下:

iOS8正确访问mainBundle和自定义Bundle中子文件夹资源文件NSBundle_第6张图片

 

七、接下来,自定义一个Bundle命名为Resources.bundle,并在Bundle中添加一个images的文件夹,然后把C.png等三张图片加入到该文件夹中。

iOS8正确访问mainBundle和自定义Bundle中子文件夹资源文件NSBundle_第7张图片

 

八、删掉TestBundle文件夹中的C.png/[email protected]/[email protected]以及项目中的三张图片,项目中如下图所示

iOS8正确访问mainBundle和自定义Bundle中子文件夹资源文件NSBundle_第8张图片

 

九、为了区别之前的mainbundle中的图片,我们再在storyboard上添加一个label和一个UIImageView,如下图:

iOS8正确访问mainBundle和自定义Bundle中子文件夹资源文件NSBundle_第9张图片

 

 

Autolayout这一块,需要大家自已去体会理解,我自已也花了1天的时间看苹果的官方文档,另外专门花了1天的时间来理解、消化、实践。

十、连线ViewController.h,并声明一个imageCustomBundle的UIImageView变量。如下图:

@property (weak, nonatomic) IBOutlet UIImageView *imageCustomBundle;

iOS8正确访问mainBundle和自定义Bundle中子文件夹资源文件NSBundle_第10张图片

 

十一、ViewController.m
// 加载自定义名称为Resources.bundle中对应images文件夹中的图片
// 思路:从mainbundle中获取resources.bundle
NSString *strResourcesBundle = [[NSBundle mainBundle] pathForResource:@”Resources” ofType:@”bundle”];
// 找到对应images夹下的图片
NSString *strC = [[NSBundle bundleWithPath:strResourcesBundle] pathForResource:@”C” ofType:@”png” inDirectory:@”images”];
UIImage *imgC = [UIImage imageWithContentsOfFile:strC];
[_imageCustomBundle setImage:imgC];

 

执行后的效果:

iOS8正确访问mainBundle和自定义Bundle中子文件夹资源文件NSBundle_第11张图片

 

你可能感兴趣的:(iOS8正确访问mainBundle和自定义Bundle中子文件夹资源文件NSBundle)