1. 程式人生 > >CALayer層的屬性(轉)

CALayer層的屬性(轉)

 

 

 

 

 

 

 

 

一.position和anchorPoint 
1.簡單介紹 
CALayer有2個非常重要的屬性:position和anchorPoint 
  position: 
  (1)用來設定CALayer在父層中的位置 
  (2)以父層的左上角為原點(0,0) 
anchorPoint: 
  (1)稱為”定位點”,”錨點” 
  (2)決定著CALayer身上的哪個點會在position屬性所指的位置 
  (3)以自己的左上角為原點(0,0) 
  (4)它的x,y取值範圍都是0~1,預設值為(0.5,0.5)

 

2.圖示 
  anchorPoint 它的取值為0~1 

紅色圖層的anchorPoint為(0,0) 

紅色圖層的anchorPoint為(0.5,0.5) 

紅色圖層的anchorPoint為(1,1) 

紅色圖層的anchorPoint為(0.5,0) 

position和anchorPoint 
新增一個紅色圖層到綠色圖層上,紅色圖層顯示到什麼位置,由position屬性決定 
假設紅色圖層的position是(100,100) 
到底把紅色圖層的哪個點移動到(100,100)的座標位置,錨點。 
紅色圖層的錨點是(0,0) 

紅色圖層的錨點是(0.5,0.5)

紅色圖層的錨點是(1,1) 

紅色圖層的錨點是(0.5,0) 

3.程式碼示例 
(1)沒有設定錨點。預設的錨點位置為(0.5,0.5)

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //建立圖層
    CALayer *layer = [CALayer layer];
    //設定圖層的屬性
    layer.backgroundColor = [UIColor redColor].CGColor;
    layer.bounds 
= CGRectMake(0, 0, 100, 100); //新增圖層 [self.view.layer addSublayer:layer]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end

(2)設定錨點為(0,0)

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //建立圖層
    CALayer *layer = [CALayer layer];
    //設定圖層的屬性
    layer.backgroundColor = [UIColor redColor].CGColor;
    layer.bounds = CGRectMake(0, 0, 100, 100);
    //設定錨點為(0,0)
    layer.anchorPoint = CGPointZero;
    //新增圖層
    [self.view.layer addSublayer:layer];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

二.隱式動畫 

1.簡單說明 
  每一個UIView內部都預設關聯著一個CALayer,我們稱這個Layer為Root Layer(根層)。 所有的非Root Layer,也就是手動建立的CALayer物件,都存在著隱式動畫 
  什麼是隱式動畫? 當對非Root Layer的部分屬性進行修改時,預設會自動產生一些動畫效果。 而這些屬性稱為Animatable Properties(可動畫屬性)。 

舉例幾個常見的可動畫屬性 
  (1)bounds:用於設定CALayer的寬度和高度。修改這個屬性會產生縮放動畫 
  (2)backgroudColor:用於設定CALayer的背景色。修改這個屬性會產生背景色的漸變動畫。 
  (3)position:用於設定CALayer的位置。修改這個屬性會產生平移動畫。 
2.程式碼示例

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //建立圖層
    CALayer *layer = [CALayer layer];
    //設定圖層屬性
    layer.backgroundColor = [UIColor brownColor].CGColor;
    layer.bounds = CGRectMake(0, 0, 150, 100);
    //顯示位置
    layer.position = CGPointMake(100, 100);
    layer.anchorPoint = CGPointZero;
    layer.cornerRadius = 20;
    //新增圖層
    [self.view.layer addSublayer:layer];
    _myLayer = layer;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    //隱式動畫
    _myLayer.bounds = CGRectMake(0, 0, 200, 60);
    _myLayer.backgroundColor = [UIColor yellowColor].CGColor;
}

@end

關閉隱式動畫

 //關閉隱式動畫
    [CATransaction begin];
    [CATransaction setDisableActions:YES];
    //隱式動畫
    _myLayer.bounds = CGRectMake(0, 0, 200, 60);
    _myLayer.backgroundColor = [UIColor yellowColor].CGColor;
    [CATransaction commit];