转自 https://www.jianshu.com/p/6efc2120d225 制作者:二猪哥
Assets.xcassets是用来存放图像资源文件的。将一个图片放在Assets里面如下图所示:
随着项目的增大,有时候使用一个Assets.xcassets文件,就显得比较臃肿了,此时我们可以根据项目结构,新建多个Assets.xcassets文件,具体步骤如下:
1、点击File -- New -- File...(或者点击command+N),在弹出的对面板中选择Asset Catalog
2、点击Next,输入xcassets的文件名字Home;点击create,创建Home.xcassets文件。
创建完成以后,项目目录结构中,就会增加一个新建的Home.xcassets文件,如下图所示:
此时,Home.xcassets文件中可加入新的图片。
加载图片的方法与系统的Assets.xcassets文件相同,如:
UIImage *image = [UIImage imageNamed:@"img_doc_bg"];
UIImageView *imageview = [[UIImageView alloc] initWithImage:image];
imageview.frame = CGRectMake(50, 50, image.size.width, image.size.height);
[self.view addSubview:imageview];
总结:
如果图片存放在Assets资源管理器,最终里面所有的图片会被打包成Assets.car,可用cartool可以把图片弄出来,详细可参考iOS中快速获取图片资源,使用这Assets用来存放图像资源文件有以下几个好处:
1、自动管理图片,如@1x,@2x图片,使用的时候使用Asset 名字即可;
2、管理应用的Icon和Default图片,这个挺方便的,可以完全抛开以前规范命名如Icon.png,Icon@2x.png,Xcode会自动识别尺寸然后匹配进去;
3、方便模块图片管理,可以针对模块建立Component1.xcassets,在这个Category中去建立新的Image set;
4、可以可视化管理图片拉伸,从而抛弃到处使用resizeImage...来获取拉伸图片;
使用Assets注意事项:
1、在Assets中的图片不能通过imageWithContentsOfFile加载;
imageNamed,其参数为图片的名字【参考:iOS 加载图片imageNamed 和imageWithContentsOfFile的区别】。
这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象如果它存在的话。如果缓存中没有找到相应的图片,这个方法从指定的文档中加载然后缓存并返回这个对象。因此imageNamed的优点是当加载时会缓存图片。所以当图片会频繁的使用时,那么用imageNamed的方法会比较好。
imageWithContentsOfFile,其参数也是图片文件的路径。 仅加载图片,图像数据不会缓存。因此对于较大的图片以及使用情况较少时,那 就可以用该方法,降低内存消耗。
2、imageName:加载的图片要么是Assets中的图片,要么是资源包中的图片,如果要用imageName:加载其他的图片,必须在文件名后面添加扩展名,如:
UIImage*image=[UIImage imageNamed:@"plus.png"];