网站建设的软件平台交换友情链接
Xcode开发工具,图片放入ios工程,有三种方式:
一:Assets
Assets.xcassets
一般是以蓝色的Assets.xcassets的文件夹形式在工程中,以Image Set的形式管理。当一组图片放入的时候同时会生成描述文件Contents.json。且在打包后以Assets.car的形式存在,不能打开(网上有工具ThemeEngine可以打开,感兴趣的可以测试)。
iOS 开发中一般在工程内导入两个到三个同内容不同像素的图片文件, 一般如下:
btn_home_add_hollow.png
btn_home_add_hollow@2x.png
btn_home_add_hollow@3x.png
这三张图片都是相同内容, 而且图片名称的前缀相同, 区别在与图片名以及图片的分辨率. 开发者将这三张图片手动拖拽到 ImageAssets 目录下, Xcode 会以图片前缀创建一个图片组。
代码中使用图片:
let addImage = UIImage(named: "btn_home_add_hollow")?.
withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
1、特性: ImageAssets 也是从图片文件中读取图片数据转为 UIImage, 只不过这些图片数据都打包在 ImageAssets 中. 还有一个最大的区别就是图片缓存. 相当于有一个字典, key 是图片名, value是图片对象. 调用imageNamed:方法时候先从这个字典里取, 如果取到就直接返回, 如果取不到再去文件中创建, 然后保存到这个字典后再返回. 由于字典的key和value都是强引用, 所以一旦创建后的图片永不销毁.
2、优势: 性能好,节省Disk。Asset Catalogs会用一个高度优化的特殊格式来存所有图片,而不是一个一个的单独的图片资源,会更少的涉及频繁Disk I/O操作,且会按需下载适合你机型的合适分辨率的图片资源; 安全性。图片资源得到一定程度保护(Asset,car不易打开)
当一个 icon 在多个地方需要被显示的时候, 其对应的UIImage对象只会被创建一次, 而且多个地方的 icon 都将会共用一个 UIImage 对象. 减少沙盒的读取操作.
3、ImageAssets 的使用场景
ImageAssets 最主要的使用场景就是 icon 类的图片, 一般 icon 类的图片大小在 3kb 到 20 kb 不等, 都是一些小文件.
二:Resource
直接拖拽到工程
如果是纯代码,图片名需要手动添加@2x,@3x等倍数标识,且需要指明后缀.png,.jpg;IB添加图片的话只需要指明后缀就好,不用添加倍数标识。
1.Resource 的使用方式
将文件直接拖入到工程目录下, 并告诉Xcode打包项目时候把这些图片文件打包进去. 这样在应用的".app"文件夹中就有这些图片. 在项目中, 读取这些图片可以通过以下方式来获取图片文件并封装成UIImge对象:
NSString *path = [NSBundle.mainBundle pathForResource:@"image@2x" type:@"png"];UIImage *image = [UIImage imageWithContentsOfFile:path];
2. Resource 的特性
在 Resource 的图片管理方式中, 所有的图片创建都是通过读取文件数据得到的, 读取一次文件数据就会产生一次NSData以及产生一个UIImage, 当图片创建好后销毁对应的NSData, 当UIImage的引用计数器变为0的时候自动销毁UIImage. 这样的话就可以保证图片不会长期地存在在内存中.
三:Bundle
- 把图片资源打包成bundle文件(资源猫)
1.Bundle 文件,简单理解,就是资源文件包。我们将许多图片、XIB、文本文件组织在一 起,打包成一个 Bundle 文件。方便在其他项目中引用包内的资源。
2.Bundle 文件是静态的,也就是说,我们包含到包中的资源文件作为一个资源包是不参 加项目编译的。bundle 包中不能包含可执行的文件。它仅仅是作为资 源,被解析成为特定的二进制数据。
3.优势:为了方便管理资源文件,可以使用bundle的方式来进行管理
4.使用方式
// bundle path
#define STBundle_Name @"SafeToolResource.bundle"
#define STBundle_Path [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:STBundle_Name]
#define STBundle [NSBundle bundleWithPath:STBundle_Path]+ (UIImage *)getSafeToolSMSBackgroundImage
{NSString *imageName = @"cmbcSafeTool_sms.png";if ([UIDevice is4Point7inchScreenOr5Point8inchScreen_cmbc]) {imageName = @"cmbcSafeTool_sms_4.7.png";}// return [UIImage imageNamed:imageName];return [UIImage imageNamed:imageNameinBundle:STBundlecompatibleWithTraitCollection:nil];
}