@IT·互联网

使用Bundle存储获取图片

2016-10-19  本文已影响520人  乄三楼半

一、制作bundle文件

1.创建一个文件夹,把要用的图片放入文件夹,并命名为*.bundle

2.把.bundle文件拖入工程中

二、使用图片

初始化一个ImageView

UIImageView *myImage=[[UIImageView alloc]initWithFrame:CGRectMake(50, 400, 100, 100)];

[self.view addSubview:myImage];

获取图片

NSString *bundlePath = [[NSBundle mainBundle].resourcePath stringByAppendingPathComponent:@"Picture.bundle"];

NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];

UIImage *(^getBundleImage)(NSString *) = ^( NSString *nm) {

return [UIImage imageWithContentsOfFile:[ bundle pathForResource:nm ofType:@"jpg"]];

};

myImage.image = getBundleImage(@"555");

获取@2x或@3x图片

myImage.image = getBundleImage(@"555@2x");

myImage.image = getBundleImage(@"555@3x");

注意:当同时存储555 和@2x @3x图片时,如果不写@2x或@3x会默认选择@3x的图片赋值给myImageview。

三、为方便使用,把写如下方法在新类中,使用时调用此类。

ImagePic.m文件中方法

+(UIImage *)imagesNamedFromCustomBundle:(NSString *)imgName

{

NSString *bundlePath = [[NSBundle mainBundle].resourcePath stringByAppendingPathComponent:@"Picture.bundle"];

NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];

NSString *img_path = [bundle pathForResource: imgName ofType:@"jpg"];

return [UIImage imageWithContentsOfFile:img_path];

}

调用

myImage.image = [ImagePic imagesNamedFromCustomBundle: @"555"];

简单理解,Bundle文件就是资源文件包。我们将许多图片、XIB、文本文件组织在一起,打包成一个Bundle文件。方便在其他项目中引用包内的资源。

Bundle是静态的,也就是说,我们包含到包中的资源文件作为一个资源包是不参加项目编译的。也就意味着,bundle包中不能包含可执行的文件。它仅仅是作为资源,被解析成为特定的2进制数据。

引用自:http://blog.sina.com.cn/s/blog_7b9d64af0101jmj2.html

imageName的方式会在使用的时候系统会cache,程序员是无法处理cache的,这是由系统自动处理的,对于重复加载的图像,速度会提升很多,这样反而用户体验好。所以如果某张图片需要在应用中使用多次,或者重复引用,使用imageName的方式会更好

imageWithContentsOfFile的方式,在使用完成之后系统会释放,不会缓存下来,所以也就没有这样的问题。一般也不会把所有的图片都会缓存。有些图片在应用中只使用一两次的,就可以用这样的方式,比如新手引导界面的图片等等,就适合这样的方式。没有明显的界限。

引用自:http://www.cnblogs.com/easonoutlook/archive/2012/12/17/2821648.html 

所以,当使用的图片不是经常使用的,可以放到bundle文件中,经常用的图片用[UIImage imageNamed:@"55"];这种方式获取比较好。

上一篇 下一篇

猜你喜欢

热点阅读