- UIImage在iOS中是比較高級(jí)的一個(gè)類,底層一點(diǎn)的有CIImage和CGImage尤蒿。
- UIImage的三個(gè)屬性:size、imageOrientation尾组、scale
一張圖片的實(shí)際尺寸應(yīng)該是size * scale示弓,這里就跟是否是retina屏幕有關(guān)了。retina屏幕的scale為2奏属,當(dāng)加載圖片的時(shí)候加載的是1x圖。然我們?cè)偕钊胍稽c(diǎn)兒為什么不直接加載到成二倍的尺寸呢勇婴,原因很簡(jiǎn)單因?yàn)槲覀冊(cè)诮缑娌季种羞壿嬜鴺?biāo)系中的 (單位是point)嘱腥,而實(shí)際的繪制都是在設(shè)備坐標(biāo)系(單位是pixel)進(jìn)行的,系統(tǒng)會(huì)自動(dòng)幫我們完成從point到pixel之間的轉(zhuǎn)化橱脸。
imageOrientation的八種枚舉:
typedef NS_ENUM(NSInteger, UIImageOrientation) {
UIImageOrientationUp, // 原始方向(向上)
UIImageOrientationDown, // 旋轉(zhuǎn)180°
UIImageOrientationLeft, // 逆時(shí)針旋轉(zhuǎn)90°
UIImageOrientationRight, // 順時(shí)針旋轉(zhuǎn)90°
UIImageOrientationUpMirrored, // 原始方向水平翻轉(zhuǎn)
UIImageOrientationDownMirrored, // Down方向水平翻轉(zhuǎn)
UIImageOrientationLeftMirrored, // Left方向垂直翻轉(zhuǎn)
UIImageOrientationRightMirrored, // Right方向垂直翻轉(zhuǎn)
};
在iOS開(kāi)發(fā)中,我們可以使用imageWithCGImage:scale:orientation:方法來(lái)設(shè)置圖片的方向屁桑。
imageNamed:是UIImage的一個(gè)類方法栏赴,它做的事情比我們看到的要稍微多一些。它的加載流程如下:
a. 系統(tǒng)會(huì)去檢查系統(tǒng)緩存中是否存在該名字的圖像乌叶,如果存在則直接返回柒爸。
b. 如果系統(tǒng)緩存中不存在該名字的圖像,則會(huì)先加載到緩存中捎稚,在返回該對(duì)象。
觀察上面的操作我們發(fā)現(xiàn)系統(tǒng)會(huì)緩存我們使用imageNamed:方法加載的圖像時(shí)候葡公,系統(tǒng)會(huì)自動(dòng)幫我們緩存条霜。這種機(jī)制適合于那種頻繁用到界面貼圖類的加載,但如果我們需要短時(shí)間內(nèi)頻繁的加載一些一次性的圖像的話蒲凶,最好不要使用這種方法拆内。imageWithContentsOfFile,imageWithData這兩個(gè)方法跟前一個(gè)方法一樣都是完成從文件加載圖像的功能。但是不會(huì)經(jīng)過(guò)系統(tǒng)緩存麸恍,直接從文件系統(tǒng)中加載并返回。
順便提一下刻肄,當(dāng)收到內(nèi)存警告的時(shí)候采够,系統(tǒng)可能會(huì)將UIImage內(nèi)部的存儲(chǔ)圖像的內(nèi)存釋放冰垄,下一次需要繪制的時(shí)候會(huì)重新去加載权她。