CALayer


*CALayer

1.介紹
2.與view的關係
3.layer能做什麼
4.layer圖層結構
5.相關api
6.子類
7.隱式動畫

1.介紹
CALayer圖層,如果把View比作銷售方的話 那麼CALaye就是生產方。layer負責繪製圖層,view負責顯示並接受事件。其實view能做的事layer也能做,但是唯獨事件接受無法做。
2.與view的關係
view的內部有一個layer,當view需要顯示內容時會調用DrawRect:方法,並將所繪製的內容都顯示到自己的圖層上,繪製完成後將繪製內容複製到屏幕上就完成了view的顯示。說白了view並不能真正的顯示內容,而是把繪製工作交給了他的內部layer,自己只負責接受事件和動畫方面更底層的工作。
區別:
view能夠顯示並接受相關事件。繼承與UIResponser
layer負責繪製內容,不處理相關事件。繼承與NSObject
3.layer能做什麼
layer可以做很多很多炫酷的動畫,設置邊框,陰影等等
4.layer圖層結構
layer包含了三層結構
最低層backgroundColor 背景色
中層:contents 內容
上層:bordWidth/bordColor 邊框
5.相關API

創建
CALayer *layer = [CALayer layer]
CALayer *layer1 = [[CALayer alloc]init]
常用屬性
1.位置相關
CGRect bounds 寬高
 CGPoint position 位置 默認終點由anchorPoint決定 用來設置layer在父層中的位置 以父視圖左上角(0,0爲原點
 CGPoint anchorPoint 錨點(x,y的範圍都是0-1)
 
  CGRect frame 圖層大小和位置,不支持隱式動畫,所以很少使用,通常使用bounds和position
  
CGColorRef backgroundColor 背景顏色
 BOOL doubleSided 圖層背景是否顯示 默認YES
 BOOL hidden 是否隱藏
 
2.邊框相關
layer.borderWidth 邊框寬度
 layer.borderColor 邊框顏色
 layer.masksToBounds 超出邊框是否裁剪 默認NO
 layer.cornerRadius 圓角半徑
 
 3.內容相關
  id contents 內容,比如設置爲圖片CGImageRef
  CGRect contentsRect 圖層顯示內容的大小和位置
  
4.動畫相關
 CATransform3D transform 實現3d移動縮放旋轉效果 UIView的transform屬性是2D的
5.陰影相關
CGColorRef shadowColor 陰影顏色
 CGColorRef shadowOffset 陰影偏移量
 float shadowOpacity 陰影透明度, 默認0,如果設置陰影必須設置此屬性
 CGPathRef shadowPath 陰影形狀
 CGFloat shadowRadius 陰影模糊半徑
6.遮罩模版
 CALayer mask 圖層蒙版---比較重要
 7.透明度
  float opacity 圖層透明度
//////常用方法
 //添加子視圖
 -(void)addSublayer:(CALayer *)layer
 
 將自己從父視圖中移除
 -(void)removeFromSuperlayer
 
  在自己子圖層數組中的第idx位置添加圖層
 - (void)insertSublayer:(CALayer *)layer atIndex:(unsigned)idx;
  將圖層layer添加在子圖層sibling的下面
 - (void)insertSublayer:(CALayer )layer below:(nullable CALayer )sibling;
 - 
  將圖層layer添加在子圖層sibling的上面
- (void)insertSublayer:(CALayer )layer above:(nullable CALayer )sibling;
  將圖層layer替換layer2;
- (void)replaceSublayer:(CALayer )layer with:(CALayer )layer2;
//////動畫相關方法
- (void)addAnimation:(CAAnimation )anim forKey:(nullable NSString )key;
 圖層添加某一屬性的動畫
 
- (nullable NSArray< NSString > )animationKeys;
 獲取所有動畫的屬性
 
 - (nullable CAAnimation )animationForKey:(NSString )key;
 獲取某一屬性的動畫
 
- (void)removeAnimationForKey:(NSString *)key;
 移除某一屬性動畫
 
- (void)removeAllAnimations;
 移除所有動畫

6.相關子類
CALayer有很多子類我用過的3個子類
1.CAGradientLayer 色調漸變layer
2.CAEmitterLayer 粒子發射器
3. CAShapeLaye 根據路徑繪製一般和UIBezierPath搭配使用

7.隱式動畫
隱式動畫顧名思義隱藏式動畫,不需要編寫動畫相關代碼就能實現的動畫就叫隱式動畫。
我們點擊CALayer頭文件進入內部時發現他的添加了

NSObject <NSSecureCoding, CAMediaTiming>動畫協議

layer的某些屬性如果發生改變時會有動畫效果默認包含了CABasicAnimation效果。比如frame,bounds,backgroundColor,position等等
如果想知道layer的某個屬性是否支持隱士動畫可以點擊屬性進去看看頭文件是否有CAMediaTiming協議
注意:view的根layer是不支持隱士動畫的,需要我們手動添加動畫代碼。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章