一、制作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"];这种方式获取比较好。