1. 程式人生 > >(一二〇)CALayer的一些特性

(一二〇)CALayer的一些特性

-s root transacti nds color resp med 註意 隱式

1.每一個View都自帶一個CALayer,稱為rootLayer,layer能夠和實現與View一樣的顯示功能,可是它不繼承UIResponse,也就是說它無法處理事件,所以為了處理事件還是要用View,假設僅僅是顯示,能夠選擇layer。

以下的代碼實現了自己定義一個layer加入到控制器的rootLayer上,layer能夠正常顯示。

CALayer *layer = [CALayer layer];
layer.bounds = CGRectMake(0, 0, 200, 200);
layer.position = CGPointMake(200, 200);
layer.backgroundColor = [UIColor redColor].CGColor;
[self.view.layer addSublayer:layer];

須要註意的是,CALayer來自QuartzCore框架。是跨平臺的,而UIColor、UIImage等來自UIKit框架,僅限於iOS系統使用,因此要設置背景、layer內容。一定要進行轉換。

以下的代碼實現了設置layer的內容為一張圖片:


layer.contents = (__bridge id)[UIImage imageNamed:@"header.png"].CGImage;

2.Layer另一個錨點屬性,能夠設置postion的參考點,錨點分為x、y坐標。範圍是0~1,(0,0)代表position從圖片左上角開始計算(默認值),(0.5,0.5)則代表以圖片中心點開始計算,這時候postion就相當於center屬性,以此類推,通過錨點屬性能夠簡化坐標運算。


3.Layer還具有隱式動畫特性,所謂隱式動畫,指的是假設UIView上有除rootLayer以外的layer,當那個layer的一些可運行動畫的屬性被改動時,會自己主動運行動畫。比如transform。假設要消除隱式動畫,須要通過提交事務的方式聲明,以下的代碼實現了對隱式動畫的取消:

[CATransaction begin]; // 開啟一個事務
[CATransaction setDisableActions:YES];
_layer.transform = CATransform3DMakeTranslation(100, 100, 0);
[CATransaction commit]; // 提交事務


(一二〇)CALayer的一些特性