一、制作bundle文件
1.創(chuàng)建一個(gè)文件夾,把要用的圖片放入文件夾,并命名為*.bundle
2.把.bundle文件拖入工程中
二、使用圖片
初始化一個(gè)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");
注意:當(dāng)同時(shí)存儲(chǔ)555 和@2x @3x圖片時(shí),如果不寫@2x或@3x會(huì)默認(rèn)選擇@3x的圖片賦值給myImageview。
三、為方便使用,把寫如下方法在新類中,使用時(shí)調(diào)用此類。
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];
}
調(diào)用
myImage.image = [ImagePic imagesNamedFromCustomBundle: @"555"];
簡(jiǎn)單理解,Bundle文件就是資源文件包。我們將許多圖片、XIB、文本文件組織在一起,打包成一個(gè)Bundle文件。方便在其他項(xiàng)目中引用包內(nèi)的資源。
Bundle是靜態(tài)的,也就是說(shuō),我們包含到包中的資源文件作為一個(gè)資源包是不參加項(xiàng)目編譯的。也就意味著,bundle包中不能包含可執(zhí)行的文件。它僅僅是作為資源,被解析成為特定的2進(jìn)制數(shù)據(jù)。
引用自:http://blog.sina.com.cn/s/blog_7b9d64af0101jmj2.html
imageName的方式會(huì)在使用的時(shí)候系統(tǒng)會(huì)cache,程序員是無(wú)法處理cache的,這是由系統(tǒng)自動(dòng)處理的,對(duì)于重復(fù)加載的圖像,速度會(huì)提升很多,這樣反而用戶體驗(yàn)好。所以如果某張圖片需要在應(yīng)用中使用多次,或者重復(fù)引用,使用imageName的方式會(huì)更好
imageWithContentsOfFile的方式,在使用完成之后系統(tǒng)會(huì)釋放,不會(huì)緩存下來(lái),所以也就沒(méi)有這樣的問(wèn)題。一般也不會(huì)把所有的圖片都會(huì)緩存。有些圖片在應(yīng)用中只使用一兩次的,就可以用這樣的方式,比如新手引導(dǎo)界面的圖片等等,就適合這樣的方式。沒(méi)有明顯的界限。
引用自:http://www.cnblogs.com/easonoutlook/archive/2012/12/17/2821648.html?
所以,當(dāng)使用的圖片不是經(jīng)常使用的,可以放到bundle文件中,經(jīng)常用的圖片用[UIImage imageNamed:@"55"];這種方式獲取比較好。