CALayer 簡介
概念
CALayer是資料 QuartzCore 框架裡面的、相對於 UIKit 框架更於底層、其主要功能是負責顯示檢視和動畫、CALayer和UIView 在除了能響應事件上功能是一致的、 不過因為其更加底層所以 CALayer 有一些介面、 UIView 裡面沒有。
動畫
有時候我們可以直接通過操作CALayer 去修改檢視。但是要注意隱式動畫的發生,CAlayer有對應的類方法可以去把隱式動畫關閉。
[CATransaction setDisableActions:YES];
我們看到的動畫、實際上在運動的是 CALayer 在動,UIView 並沒有參加。
因為CI層操作的是CA層. CGImageRef、CGColorRef兩種資料型別是定義在CoreGraphics框架中的.
UIColor、UIImage是定義在UIKit框架中的。
- 什麼是隱式動畫?
當對非Root Layer的部分屬性進行修改時,預設會自動產生一些動畫效果
而這些屬性稱為Animatable Properties(可動畫屬性)
在CALayer.h中屬性被Animatable修飾的就是會可動畫的
Framework
QuartzCore框架和CoreGraphics框架是可以跨平臺使用的,在iOS和Mac OS X上都能使用
但是UIKit只能在iOS中使用
• 為了保證可移植性,QuartzCore不能使用UIImage、UIColor,只能使用CGImageRef、CGColorRef
• 在iOS中,你能看得見摸得著的東西基本上都是UIView,比如一個按鈕、一個文字標籤、一個文字輸入框、一個圖示等等,這些都是UIView
• 其實UIView之所以能顯示在螢幕上,完全是因為它內部的一個圖層
• 在建立UIView物件時,UIView內部會自動建立一個圖層(即CALayer物件),通過UIView的layer屬性可以訪問這個層
• 當UIView需要顯示到螢幕上時,會呼叫drawRect:方法進行繪圖,並且會將所有內容繪製在自己的圖層上,繪圖完畢後,系統會將圖層拷貝到螢幕上,於是就完成了UIView的顯示
• 換句話說,UIView本身不具備顯示的功能,是它內部的層才有顯示功能
因為CALayer 是一種更輕量級別的檢視、所以如果不需要響應點選事件的時候。可以直接使用其去顯示即可以提升效能。
@property 簡介
•寬度和高度 @property CGRect bounds; •位置(預設指中點,具體由anchorPoint決定) @property CGPoint position; •錨點(x,y的範圍都是0-1),決定了position的含義 @property CGPoint anchorPoint; •背景顏色(CGColorRef型別) @property CGColorRef backgroundColor; •形變屬性 @property CATransform3D transform; •邊框顏色(CGColorRef型別) @property CGColorRef borderColor; •邊框寬度 @property CGFloat borderWidth; •圓角半徑 @property CGFloat cornerRadius; •內容(比如設定為圖片CGImageRef) @property(retain) id contents; •陰影顏色 @property CGColorRef shadowColor; •陰影不透明(0.0 ~ 1.0) @property float shadowOpacity; •陰影偏移位置 @property CGSize shadowOffset; •@property CGPoint position;
用來設定CALayer在父層中的位置
以父層的左上角為原點(0, 0)
•@property CGPoint anchorPoint;
稱為“定位點”、“錨點”
決定著CALayer身上的哪個點會在position屬性所指的位置
以自己的左上角為原點(0, 0)
它的x、y取值範圍都是0~1,預設值為(0.5, 0.5)