類繼承結構
CAAnimation
CAAnimation是一個抽象動畫類,是所有動畫類的父類厨相,不能直接使用秤涩,應該使用它具體的子類。
CAMediaTiming
CAPropertyAnimation
CABasicAnimation 基礎動畫
隨著動畫的執(zhí)行嗽测,在duration的持續(xù)時間內(nèi),keyPath相應的屬性值從fromValue逐漸變?yōu)閠oValue
- keyPath內(nèi)容是CALayer的可動畫Animation屬性
屬性:
fromValue:keyPath相應屬性值的初始值
toValue:keyPath相應屬性的結束值
byValue:keyPath相應屬性值的修改值
用法:
CABasicAnimation *animation = [CABasicAnimation animation];
animation.keyPath = @"position"; // 動畫類型
animation.duration = 5; // 動畫完成時間
animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, 0)]; // 動畫初始值
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(200, 300)]; // 動畫完成后值
animation.removedOnCompletion = NO; // 動畫完成后不刪除
animation.fillMode = kCAFillModeForwards; // 保持動畫最后狀態(tài)
[view.layer addAnimation:animation forKey:nil];
CAKeyframeAnimation 關鍵幀動畫
CApropertyAnimation的子類肿孵,跟CABasicAnimation的區(qū)別是:CABasicAnimation只能從一個數(shù)值(fromValue)變到另一個數(shù)值(toValue)唠粥,而CAKeyframeAnimation會用一個NSArray保存多個這樣數(shù)值
屬性:
values:就是上述的NSArray對象疏魏。里面的元素稱為”關鍵幀”(keyframe)。動畫對象會在指定的時間(duration)內(nèi)晤愧,依次顯示values數(shù)組中的每一個關鍵幀
path:可以設置一個CGPathRef\CGMutablePathRef,讓層跟著路徑移動大莫。path只對CALayer的anchorPoint和position起作用。如果你設置了path养涮,那么values將被忽略
keyTimes:可以為對應的關鍵幀指定對應的時間點,其取值范圍為0到1.0,keyTimes中的每一個時間值都對應values中的每一幀.當keyTimes沒有設置的時候,各個關鍵幀的時間是平分的
說明:CABasicAnimation可看做是最多只有2個關鍵幀的CAKeyframeAnimation
用法:
CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
animation.keyPath = @"position";
animation.duration = 5;
NSValue *value1 = [NSValue valueWithCGPoint:CGPointMake(0, 100)];
NSValue *value2 = [NSValue valueWithCGPoint:CGPointMake(200, 100)];
NSValue *value3 = [NSValue valueWithCGPoint:CGPointMake(200, 200)];
NSValue *value4 = [NSValue valueWithCGPoint:CGPointMake(300, 200)];
NSValue *value5 = [NSValue valueWithCGPoint:CGPointMake(300, 300)];
NSValue *value6 = [NSValue valueWithCGPoint:CGPointMake(100, 300)];
animation.values = @[value1, value2, value3, value4, value5, value6];
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.repeatCount = 3;
animation.delegate = self;
[_v.layer addAnimation:animation forKey:nil];
CATransition 轉場動畫
CAAnimation的子類葵硕,用于做轉場動畫,能夠為層提供移出屏幕和移入屏幕的動畫效果
屬性:
type:轉場動畫類型
subtype:轉場動畫方向
startProgress:動畫起點(在整體動畫的百分比)
endProgress:動畫終點(在整體動畫的百分比)
用法:
CATransition *transition = [CATransition animation];
transition.type = @"push"; // 轉場效果
transition.subtype = kCATransitionFromLeft; // 轉場方向
transition.duration = 2.0;
[_v.layer addAnimation:transition forKey:nil];
CAAnimationGroup 動畫組
CAAnimation的子類贯吓,可以保存一組動畫對象,將CAAnimationGroup對象加入層后蜀变,組中所有動畫對象可以同時并發(fā)運行
屬性:
- animations:用來保存一組動畫對象的NSArray
默認情況下悄谐,一組動畫對象是同時運行的,也可以通過設置動畫對象的beginTime屬性來更改動畫的開始時間
用法:
// 平移動畫
CABasicAnimation *a1 = [CABasicAnimation animation];
a1.keyPath = @"transform.translation.y";
a1.toValue = @(100);
// 縮放動畫
CABasicAnimation *a2 = [CABasicAnimation animation];
a2.keyPath = @"transform.scale";
a2.toValue = @(0.0);
// 旋轉動畫
CABasicAnimation *a3 = [CABasicAnimation animation];
a3.keyPath = @"transform.rotation";
a3.toValue = @(M_PI_2);
// 組動畫
CAAnimationGroup *groupAnima = [CAAnimationGroup animation];
groupAnima.animations = @[a1, a2, a3];
groupAnima.duration = 2;
groupAnima.repeatCount = 2;
groupAnima.fillMode = kCAFillModeForwards;
groupAnima.removedOnCompletion = NO;
[view.layer addAnimation:groupAnima forKey:nil];