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];
执行后的效果:
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];
执行后的效果:
相关文章推荐
- iOS 9的 Core Image新滤镜
- iOS图像处理框架Core Image
- iOS Core Animation 简明系列教程
- IOS CoreText.framework --- 基本用法
- IOS异步获取数据并刷新界面dispatch_async的使用方法
- iOS7 相关资料整理
- [IOS]edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets
- iOS6.0后一些Rotations的变更
- iOS获取文件长度和文件大小
- 个推推送iOS版 常见问题详解
- iOS 开发之动画篇 - Transform和KeyFrame动画
- ios NSInvocation简单使用
- IOS应用提交所需尺寸
- 面向对象3-键值编码(KVC)和键值监听(KVO)
- Tableview详细方法
- IOS基础:retain,copy,assign及autorelease
- iOS Xcode7.2开发时使用SBJson解析时 出现野指针的问题解决
- iOS取证将如漫漫长夜
- iOS-使用代码CGImage调节tabBar上按钮图片的大小
- iOS 调试技巧