CABasicAnimation的使用方法(移動,旋轉,縮放)
設定動畫CABasicAnimation的屬性和說明
屬性 | 說明 |
---|---|
duration | 動畫的時間 |
repeatCount | 重複的次數。不停重複設定為 HUGE_VALF |
repeatDuration | 設定動畫的時間。 |
beginTime | 指定動畫開始的時間。從開始延遲幾秒的話,設定為【CACurrentMediaTime() + 秒數】 的方式 |
timingFunction | 設定動畫的速度變化 |
autoreverses | 動畫結束時是否執行逆動畫 |
fromValue | 所改變屬性的起始值 |
toValue | 所改變屬性的結束時的值 |
byValue | 所改變屬性相同起始值的改變數 |
動畫結束後停在最後位置狀態的解決方法
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
1.移動動畫
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];animation.duration = 2;
animation.repeatCount
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