您的位置:首页 > 移动开发 > IOS开发

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

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

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

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

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

进入正题:

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





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





三、准备两组6张图,M表示Mainbundle加载的图片,C表示自定义Bundle加载的图片,分别命名为M.png,M@2x.png,M@3x.png和C.png,C@2x.png,C@3x.png,

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

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





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





五、Storyboard中的设置



六、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];

}

运行后的效果图如下:





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





八、删掉TestBundle文件夹中的C.png/C@2x.png/C@3x.png以及项目中的三张图片,项目中如下图所示





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





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

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

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





十一、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];

执行后的效果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: