1. 程式人生 > >CABasicAnimation的使用方法(移動,旋轉,縮放)

CABasicAnimation的使用方法(移動,旋轉,縮放)

設定動畫CABasicAnimation的屬性和說明

屬性 說明
duration 動畫的時間
repeatCount 重複的次數。不停重複設定為 HUGE_VALF
repeatDuration 設定動畫的時間。
beginTime 指定動畫開始的時間。從開始延遲幾秒的話,設定為【CACurrentMediaTime() + 秒數】 的方式
timingFunction 設定動畫的速度變化
autoreverses 動畫結束時是否執行逆動畫
fromValue 所改變屬性的起始值
toValue 所改變屬性的結束時的值
byValue 所改變屬性相同起始值的改變數

動畫結束後停在最後位置狀態的解決方法

用CABasicAnimation執行動畫,在動畫結束後會迴歸動畫開始前的狀態。想要解決的話,必須設定“removedOnCompletion”和“fillMode”這兩個屬性
animation.removedOnCompletion = NO

animation.fillMode = kCAFillModeForwards; 

1.移動動畫

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"]; 
animation.duration = 2;
animation.repeatCount
 = 2;

animation.beginTime =CACurrentMediaTime() + 1;// 1秒後執行

animation.fromValue = [NSValue valueWithCGPoint:myView.layer.position]; // 起始幀 

animation.toValue = [NSValue valueWithCGPoint:CGPointMake(300, 300)]; // 終了幀

// 檢視新增動畫 

[View.layer addAnimation:animation forKey:@"move-layer"]; 

2.旋轉動畫

// 對Y軸進行旋轉(指定Z軸的話,就和UIView的動畫一樣繞中心旋轉)
 
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];

animation.duration = 2;

animation.repeatCount = 2;

animation.beginTime = CACurrentMediaTime() + 1// 1秒後執行

animation.fromValue = [NSNumber numberWithFloat:0.0]; // 起始角度

animation.toValue = [NSNumber numberWithFloat:M_PI]; // 終止角度 

[View.layer addAnimation:animation forKey:@"rotate-layer"];

3.縮放動畫

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
animation.duration = 2.5// 動畫持續時間 
animation.repeatCount = 1// 重複次數 
animation.fromValue = [NSNumber numberWithFloat:1.0]; // 開始時的倍率  
animation.toValue = [NSNumber numberWithFloat:2.0]; // 結束時的倍率 

[myView.layer addAnimation:animation forKey:@"scale-layer"];

4.漸隱動畫

//opacity layer的透明度

    CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];

    basicAnimation.fromValue = @(1.0);

    basicAnimation.toValue  = @(0.0);//[NSNumber numberWithFloat:0.0]

    basicAnimation.duration = 1.5;

    [self.myView.layer addAnimation:basicAnimation forKey:@"op"];


5.組合動畫

CABasicAnimation *animation1 =[CABasicAnimation animationWithKeyPath:@"transform.translation.x"]; animation1.toValue = [NSNumber numberWithFloat:80];; // 終點  CABasicAnimation *animation1 =[CABasicAnimation animationWithKeyPath:@"transform.translation.z"]; animation2.fromValue = [NSNumber numberWithFloat:0.0]; // 開始時的角度
animation2.toValue = [NSNumber numberWithFloat:M_PI]; // 結束時的角度
/* 動畫組 */ 
CAAnimationGroup *group = [CAAnimationGroup animation]; 
group.duration = 1.0;  
group.repeatCount = 1;
group.animations = [NSArray arrayWithObjects:animation1, animation2, nil nil];  
[myView.layer addAnimation:group forKey:@"move-rotate-layer"]; 

6.捕獲動畫開始時和終了時的事件

- (void)animationDidStart:(CAAnimation *)theAnimation {  }
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {  }
參考部落格:http://blog.csdn.net/iosevanhuang/article/details/14488239