貓貓學IOS(三十九)UI之核心動畫之CABasicAnimation(基礎動畫),ioscabasicanimation
貓貓分享,必須精品
原創文章,歡迎轉載。轉載請註明:翟乃玉的部落格
地址:http://blog.csdn.net/u013357243?viewmode=contents
一、CABasicAnimation簡介
CAPropertyAnimation的子類
屬性解析:
fromValue:keyPath相應屬性的初始值
toValue:keyPath相應屬性的結束值
隨著動畫的進行,在長度為duration的期間內,keyPath相應屬性的值從fromValue漸漸地變為toValue
如果fillMode=kCAFillModeForwards和removedOnComletion=NO,那麼在動畫執行完畢後,圖層會保持顯示動畫執行後的狀態。但在實質上,圖層的屬性值還是動畫執行前的初始值,並沒有真正被改變。比如,CALayer的position初始值為(0,0),CABasicAnimation的fromValue為(10,10),toValue為(100,100),雖然動畫執行完畢後圖層保持在(100,100)這個位置,實質層的position還是為(0,0)
CAPropertyAnimation
CAPropertyAnimation是CAAnimation的子類,也是個抽象類別,要想建立動畫對象,應該使用它的兩個子類:CABasicAnimation和CAKeyframeAnimation。
屬性解析:
keyPath:通過指定CALayer的一個屬性名稱為keyPath(NSString類型),並且對CALayer的這個屬性的值進行修改,達到相應的動畫效果。比如,指定@”position”為keyPath,就修改CALayer的position屬性的值,以達到平移的動畫效果。
二:平移動畫
效果:
代碼:
- (void)viewDidLoad{ [super viewDidLoad]; // 1.建立layer CALayer *myLayer = [CALayer layer]; myLayer.bounds = CGRectMake(0, 0, 100, 100); myLayer.anchorPoint = CGPointZero; myLayer.position = CGPointMake(100, 100); myLayer.backgroundColor = [UIColor greenColor].CGColor; // 2.將自訂Layer添加到控制器的view的layer上 [self.view.layer addSublayer:myLayer]; self.myLayer = myLayer;}- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ // 1. 建立核心動畫 CABasicAnimation *anima = [CABasicAnimation animation] ; // 1.1告訴系統要執行什麼樣的動畫 anima.keyPath = @"position"; // 設定通過動畫將layer從哪 // anima.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, 0)]; // 到哪(到指定的位置) anima.toValue = [NSValue valueWithCGPoint:CGPointMake(200, 300)]; // 在當前位置的基礎上增加多少 // anima.byValue = [NSValue valueWithCGPoint:CGPointMake(0, 300)]; // 設定動畫時間 anima.duration = 3; // 1.2 設定動畫執行完畢之後不刪除動畫 anima.removedOnCompletion = NO; // 1.3 設定儲存動畫的最新狀態 anima.fillMode = kCAFillModeForwards; // 2.添加核心動畫到Layer [self.myLayer addAnimation:anima forKey:nil];}
三:縮放動畫
效果:
代碼:
- (void)viewDidLoad{ [super viewDidLoad]; // 1.建立layer CALayer *myLayer = [CALayer layer]; myLayer.bounds = CGRectMake(0, 0, 100, 100); myLayer.anchorPoint = CGPointZero; myLayer.position = CGPointMake(100, 100); myLayer.backgroundColor = [UIColor greenColor].CGColor; // 2.將自訂Layer添加到控制器的view的layer上 [self.view.layer addSublayer:myLayer]; self.myLayer = myLayer;}- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ // 1. 建立核心動畫 CABasicAnimation *anima = [CABasicAnimation animation] ; // 1.1設定動畫類型 anima.keyPath = @"bounds"; // 1.2 設定動畫執行完畢之後不刪除動畫 anima.removedOnCompletion = NO; // 1.3 設定儲存動畫的最新狀態 anima.fillMode = kCAFillModeForwards; // 1.4設定動畫時間 anima.duration = 1; // 1.5修改動畫 anima.toValue =[NSValue valueWithCGRect: CGRectMake(0, 0, 200, 200)]; // 2.添加核心動畫到Layer [self.myLayer addAnimation:anima forKey:nil];}
四:旋轉動畫
效果:
代碼:
- (void)viewDidLoad{ [super viewDidLoad]; // 1.建立layer CALayer *myLayer = [CALayer layer]; myLayer.bounds = CGRectMake(0, 0, 100, 100); myLayer.anchorPoint = CGPointZero; myLayer.position = CGPointMake(100, 100); myLayer.backgroundColor = [UIColor greenColor].CGColor; // 2.將自訂Layer添加到控制器的view的layer上 [self.view.layer addSublayer:myLayer]; self.myLayer = myLayer;}- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ // 1. 建立核心動畫 CABasicAnimation *anima = [CABasicAnimation animation] ; // 1.1設定動畫類型 anima.keyPath = @"transform"; // 1.2 設定動畫執行完畢之後不刪除動畫 anima.removedOnCompletion = NO; // 1.3 設定儲存動畫的最新狀態 anima.fillMode = kCAFillModeForwards; // 1.4設定動畫時間 anima.duration = 1; // 1.5修改動畫 anima.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_4, 0, 0, 1)]; // 2.添加核心動畫到Layer [self.myLayer addAnimation:anima forKey:nil];}
五:通過transform(KVC)的方式設定
y方向縮放1.5倍
效果:
代碼:
- (void)viewDidLoad{ [super viewDidLoad]; // 1.建立layer CALayer *myLayer = [CALayer layer]; myLayer.bounds = CGRectMake(0, 0, 100, 100); myLayer.anchorPoint = CGPointZero; myLayer.position = CGPointMake(100, 100); myLayer.backgroundColor = [UIColor greenColor].CGColor; // 2.將自訂Layer添加到控制器的view的layer上 [self.view.layer addSublayer:myLayer]; self.myLayer = myLayer;}- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ // 1. 建立核心動畫 CABasicAnimation *anima = [CABasicAnimation animation] ; // 1.1設定動畫類型 // anima.keyPath = @"transform.translation.x"; anima.keyPath = @"transform.scale.y"; // 1.2 設定動畫執行完畢之後不刪除動畫 anima.removedOnCompletion = NO; // 1.3 設定儲存動畫的最新狀態 anima.fillMode = kCAFillModeForwards; // 1.4設定動畫時間 anima.duration = 1;// y方向縮放1.5倍 anima.toValue = @(1.5); // 2.添加核心動畫到Layer [self.myLayer addAnimation:anima forKey:nil];}