iOS開發UI篇—CAlayer層的屬性 html
1、position和anchorPoint app
1.簡單介紹 動畫
CALayer有2個很是重要的屬性:position和anchorPoint atom
@property CGPoint position; spa
用來設置CALayer在父層中的位置 .net
以父層的左上角爲原點(0, 0) code
@property CGPoint anchorPoint; htm
稱爲「定位點」、「錨點」 對象
決定着CALayer身上的哪一個點會在position屬性所指的位置 blog
以本身的左上角爲原點(0, 0)
它的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)
//
// YYViewController.m
// 03-錨點等屬性
//
// Created by apple on 14-6-21.
// Copyright (c) 2014年 itcase. All rights reserved.
//
#import "YYViewController.h"
@interface YYViewController ()
@end
@implementation YYViewController
- (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];
}
@end
顯示效果:
(1)設置錨點位置爲(0,0)
- (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];
}
@end
顯示效果:
2、隱式動畫
1.簡單說明
每個UIView內部都默認關聯着一個CALayer,咱們可用稱這個Layer爲Root Layer(根層)
全部的非Root Layer,也就是手動建立的CALayer對象,都存在着隱式動畫
什麼是隱式動畫?
當對非Root Layer的部分屬性進行修改時,默認會自動產生一些動畫效果
而這些屬性稱爲Animatable Properties(可動畫屬性)
列舉幾個常見的Animatable Properties:
bounds:用於設置CALayer的寬度和高度。修改這個屬性會產生縮放動畫
backgroundColor:用於設置CALayer的背景色。修改這個屬性會產生背景色的漸變更畫
position:用於設置CALayer的位置。修改這個屬性會產平生移動畫
2.代碼示例
//
// YYViewController.m
// 04-隱式動畫
//
// Created by apple on 14-6-21.
// Copyright (c) 2014年 itcase. All rights reserved.
//
#import "YYViewController.h"
@interface YYViewController ()
@property(nonatomic,strong)CALayer *layer;
@end
@implementation YYViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//建立圖層
CALayer *mylayer=[CALayer layer];
//設置圖層屬性
mylayer.backgroundColor=[UIColor brownColor].CGColor;
mylayer.bounds=CGRectMake(0, 0, 150, 100);
//顯示位置
mylayer.position=CGPointMake(100, 100);
mylayer.anchorPoint=CGPointZero;
mylayer.cornerRadius=20;
//添加圖層
[self.view.layer addSublayer:mylayer];
self.layer=mylayer;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//隱式動畫
self.layer.bounds=CGRectMake(0, 0, 200, 60);
self.layer.backgroundColor=[UIColor yellowColor].CGColor;
}
@end
效果:
關閉隱式動畫:
1 [CATransaction begin];
2 [CATransaction setDisableActions:YES];
3 //隱式動畫
4 self.layer.bounds=CGRectMake(0, 0, 200, 60);
5 self.layer.backgroundColor=[UIColor yellowColor].CGColor;
6 [CATransaction commit];
3.如何查看CALayer的某個屬性是否支持隱式動畫?
能夠查看頭文件,看有沒有Animatable,若是有則表示支持。
也能夠查看官方文檔
文檔中標明的這些屬性都是支持隱式動畫的