- UIImage在iOS中是比较高级的一个类,底层一点的有CIImage和CGImage。
- UIImage的三个属性:size、imageOrientation、scale
一张图片的实际尺寸应该是size * scale,这里就跟是否是retina屏幕有关了。retina屏幕的scale为2,当加载图片的时候加载的是1x图。然我们再深入一点儿为什么不直接加载到成二倍的尺寸呢,原因很简单因为我们在界面布局中逻辑坐标系中的 (单位是point),而实际的绘制都是在设备坐标系(单位是pixel)进行的,系统会自动帮我们完成从point到pixel之间的转化。
imageOrientation的八种枚举:
typedef NS_ENUM(NSInteger, UIImageOrientation) {
UIImageOrientationUp, // 原始方向(向上)
UIImageOrientationDown, // 旋转180°
UIImageOrientationLeft, // 逆时针旋转90°
UIImageOrientationRight, // 顺时针旋转90°
UIImageOrientationUpMirrored, // 原始方向水平翻转
UIImageOrientationDownMirrored, // Down方向水平翻转
UIImageOrientationLeftMirrored, // Left方向垂直翻转
UIImageOrientationRightMirrored, // Right方向垂直翻转
};
在iOS开发中,我们可以使用imageWithCGImage:scale:orientation:方法来设置图片的方向。
-
imageNamed:是UIImage的一个类方法,它做的事情比我们看到的要稍微多一些。它的加载流程如下:
a. 系统会去检查系统缓存中是否存在该名字的图像,如果存在则直接返回。
b. 如果系统缓存中不存在该名字的图像,则会先加载到缓存中,在返回该对象。
观察上面的操作我们发现系统会缓存我们使用imageNamed:方法加载的图像时候,系统会自动帮我们缓存。这种机制适合于那种频繁用到界面贴图类的加载,但如果我们需要短时间内频繁的加载一些一次性的图像的话,最好不要使用这种方法。 -
imageWithContentsOfFile,imageWithData这两个方法跟前一个方法一样都是完成从文件加载图像的功能。但是不会经过系统缓存,直接从文件系统中加载并返回。
顺便提一下,当收到内存警告的时候,系统可能会将UIImage内部的存储图像的内存释放,下一次需要绘制的时候会重新去加载。
网友评论