[譯] Core Animation 編程指南 - 附錄A:圖層樣式屬性動畫

渲染過程期間,Core Animation 採用圖層的不一樣屬性,並以特定順序渲染它們。該順序決定圖層最終的展現樣式。本章說明了經過設置不一樣的圖層樣式屬性得到的渲染結果。動畫

注意:圖層的樣式屬性在 Mac OS X 和 iOS 上是不一樣的,本章都有說明。3d

幾何屬性

圖層的幾何屬性指定了它如何在它的父圖層上顯示。幾何屬性也指定了圖層的圓角半徑,應用在圖層及子圖層上的形變。圖 A-1 展現了示例圖層的邊界形狀。code

圖 A-1 圖層幾何圖形

下面的 CALayer 屬性制定了圖層的幾何圖形:orm

  • bounds
  • position
  • frame (經過 bounds 和 position 計算得來,它不可動畫)
  • anchorPoint
  • cornerRadius
  • transform
  • zPosition

iOS 注意:cornerRadius 屬性僅在 iOS 3.0 及之後版本可用。cdn

背景屬性

Core Animation 渲染的第一件事就是圖層的背景。你能夠給背景指定顏色。在 OS X 上,你也能夠給背景內容指定你想應用的 Core Image 過濾器。圖 A-2 展現了一個圖層的兩個版本。左邊圖層設置了 backgroundColor 屬性;右邊圖層沒有設置 backgroundColor 屬性,但它有內容和邊框,和賦值給 backgroundFilters 屬性的收縮失真濾波器。對象

圖 A-2 有背景色的圖層

背景過濾器應用於圖層後面的內容,該內容主要由父圖層的內容組成。你可使用背景濾鏡來突出前景層內容;例如,經過應用模糊過濾器。blog

下面的 CALayer 屬性影響圖層的背景展現:遞歸

  • backgroundColor
  • backgroundFilters (不支持 iOS)

平臺說明:在 iOS 上,CALayer 類有 backgroundFilters 屬性的接口,但你給該屬性賦的值會被忽略。接口

圖層內容

若是圖層有任何內容,該內容將在背景色上面渲染。你能夠經過如下方式提供圖層內容:ci

  • 直接設置位圖
  • 使用 delegate 指定內容
  • 子類化圖層直接繪製圖層內容

你可使用不少不一樣的繪製技術(包括 Quartz, Metal, OpenGL, 和 Quartz Composer)來提供內容。圖 A-3 展現了經過直接設置位圖來展現內容的圖層。位圖內容由一個大部分透明的空間組成,自動機圖標位於右下角。

圖 A-3 圖層顯示位圖圖像
圖層的圓角半徑不會自動剪切它們的內容;但將圖層的 masksToBounds 屬性設置爲 YES 會致使圖層剪切它的圓角。

下面 CALayer 的屬性影響圖層內容的顯示:

  • contents
  • contentsGravity
  • masksToBounds

子圖層內容

任何圖層可能包含一個或者多個孩子圖層(child layer),稱爲子圖層(sublayers)。子圖層遞歸渲染,並相對於父圖層的邊界矩形定位。另外, Core Animation 會將父圖層的 sublayerTransform 應用到每個和父圖層錨點相關的子圖層。你可使用子圖層變換將透視和其餘效果均等地應用到全部圖層。圖 A-4 展現了有兩個子圖層的示例圖層。左邊的版本包含背景色,右邊的則不包含。

圖 A-4 顯示子圖層內容的圖層
將圖層的 masksToBounds 屬性設置爲 YES ,會形成超出圖層邊界的全部子圖層內容被裁減。

CALayer 下面的屬性影響圖層的子圖層內容顯示:

  • sublayers
  • masksToBounds
  • sublayerTransform

邊界線屬性

圖層使用指定的顏色和寬度顯示一個可選邊界線。邊框遵循圖層的邊界矩形,而且會考慮任何圓角半徑。圖 A-5 展現了顯示邊界線的示例圖層。注意圖層邊界線之外的內容和子圖層,被渲染在邊界線的下面。

圖 A-5 顯示邊界線的圖層

CALayer 下面的屬性影響圖層的邊界線顯示:

  • borderColor
  • borderWidth

平臺說明: borderColor 和 borderWidth 屬性僅在 iOS 3.0 及之後版本可用。

過濾器屬性

在 OS X,你能夠給圖層內容應用一個或多個過濾器,也可使用自定義的合成過濾器去指定圖層內容如何和它底部圖層的內容混合。圖 A-6 展現了應用 Core Image 後置過濾器的示例圖層。

圖 A-6 顯示過濾器的圖層

CALayer 下面的屬性指定圖層內容過濾器:

  • filters
  • compositingFilter

平臺說明: 在 iOS, 圖層會忽略你賦值的任意過濾器。

陰影屬性

圖層可顯示陰影效果,而且能夠配置它們的形狀、不透明度、顏色、偏移量和模糊半徑。若是你沒有指定自定義陰影形狀,那陰影會基於圖層中不徹底透明的部分繪製。圖 A-7 展現了同一應用紅色陰影的示例圖層的幾個不一樣版本。左邊和中間的圖層有背景色,因此陰影只出如今邊界線附近。而右邊的圖層沒有背景色,在這種狀況下,陰影會應用到圖層的內容,邊界線和子圖層上。

圖 A-7 顯示陰影屬性的圖層

CALayer 下面的屬性影響圖層陰影的顯示:

  • shadowColor
  • shadowOffset
  • shadowOpacity
  • shadowRadius
  • shadowPath

平臺說明: shadowColor, shadowOffset, shadowOpacity, 和 shadowRadius 屬性僅在 iOS 3.0 及之後版本可用。 shadowPath 屬性支持 iOS 3.2 及之後版本;OS X v10.7 及之後版本。

不透明屬性

圖層的不透明度屬性決定了經過圖層顯示多少背景內容。圖 A-8 展現了不透明度設置爲 0.5 的示例圖層。這容許背景圖像的一部分顯示出來。

圖 A-8 包含不透明屬性的圖層

CALayer 下面的屬性指定圖層的不透明度:

  • opacity

遮罩屬性

你可使用遮罩來隱藏圖層的所有或部份內容。遮罩自己就是一個圖層對象,其 alpha 通道用於肯定哪些被阻止,哪些被傳輸。遮罩層內容的不透明部分容許下面的圖層內容透過,而透明部分部分或徹底遮蔽下面的內容。圖 A-9 展現了一個示例圖層,它由一個遮罩層和兩個不一樣的背景組成。在左側版本中,圖層的不透明度設置爲1.0。在右邊的版本中,圖層的不透明度被設置爲0.5,這增長了經過圖層的遮罩部分傳輸的背景內容的數量。

圖 A-9 與遮罩屬性結合的圖層

CALayer 下面的屬性指定圖層的遮罩:

  • mask

平臺說明: mask 屬性僅在 iOS 3.0 及之後版本可用。

相關文章
相關標籤/搜索