CALayer 有一個(gè)屬性叫做contents昧识,這個(gè)屬性的類型被定義為id纵势,意味著它可以是任何類型的對(duì)象埠偿。在這種情況下步清,你可以給contents屬性賦任何值要门,你的app仍然能夠編譯通過。但是廓啊,在實(shí)踐中暂衡,如果你給contents賦的不是CGImage,那么你得到的圖層將是空白的崖瞭。
和bounds狂巢,frame不同,contentsRect不是按點(diǎn)來計(jì)算的书聚,它使用了單位坐標(biāo)唧领,單位坐標(biāo)指定在0到1之間,是一個(gè)相對(duì)值(像素和點(diǎn)就是絕對(duì)值)雌续。所以他們是相對(duì)與寄宿圖的尺寸的斩个。iOS使用了以下的坐標(biāo)系統(tǒng):
- 點(diǎn) —— 在iOS和Mac OS中最常見的坐標(biāo)體系。點(diǎn)就像是虛擬的像素驯杜,也被稱作邏輯像素受啥。在標(biāo)準(zhǔn)設(shè)備上,一個(gè)點(diǎn)就是一個(gè)像素鸽心,但是在Retina設(shè)備上滚局,一個(gè)點(diǎn)等于2*2個(gè)像素。iOS用點(diǎn)作為屏幕的坐標(biāo)測(cè)算體系就是為了在Retina設(shè)備和普通設(shè)備上能有一致的視覺效果顽频。
- 像素 —— 物理像素坐標(biāo)并不會(huì)用來屏幕布局藤肢,但是仍然與圖片有相對(duì)關(guān)系。UIImage是一個(gè)屏幕分辨率解決方案糯景,所以指定點(diǎn)來度量大小嘁圈。但是一些底層的圖片表示如CGImage就會(huì)使用像素,所以你要清楚在Retina設(shè)備和普通設(shè)備上蟀淮,他們表現(xiàn)出來了不同的大小最住。
- 單位 —— 對(duì)于與圖片大小或是圖層邊界相關(guān)的顯示,單位坐標(biāo)是一個(gè)方便的度量方式怠惶, 當(dāng)大小改變的時(shí)候涨缚,也不需要再次調(diào)整。單位坐標(biāo)在OpenGL這種紋理坐標(biāo)系統(tǒng)中用得很多甚疟,Core Animation中也用到了單位坐標(biāo)仗岖。