設定動畫CABasicAnimation的屬性和說明
屬性 | 說明 |
---|---|
duration | 動畫的時間 |
repeatCount | 重復的次數。不停重復設置為 HUGE_VALF |
repeatDuration | 設置動畫的時間。 |
beginTime | 指定動畫開始的時間。從開始延遲幾秒的話,設置為【CACurrentMediaTime() + 秒數】 的方式 |
timingFunction | 設置動畫的速度變化 |
autoreverses | 動畫結束時是否執行逆動畫 |
fromValue | 所改變屬性的起始值 |
toValue | 所改變屬性的結束時的值 |
byValue | 所改變屬性相同起始值的改變量 |
//創建一個image view
UIImageView *imageview=[[UIImageView alloc]init];
imageview.image=[UIImage imageNamed:@"logo.png"];
imageview.frame=CGRectMake(50, 50, imageview.image.size.width, imageview.image.size.height);
[self.view addSubview:imageview];
//動畫關鍵字屬性設置說明
值 | 說明 | 使用形式 |
---|---|---|
transform.scale | 比例轉化 | @(0.8) |
transform.scale.x | 寬的比例 | @(0.8) |
transform.scale.y | 高的比例 | @(0.8) |
transform.rotation.x | 圍繞x軸旋轉 | @(M_PI) |
transform.rotation.y | 圍繞y軸旋轉 | @(M_PI) |
transform.rotation.z | 圍繞z軸旋轉 | @(M_PI) |
cornerRadius | 圓角的設置 | @(50) |
backgroundColor | 背景顏色的變化 | (id)[UIColor purpleColor].CGColor |
bounds | 大小,中心不變 | [NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)]; |
position | 位置(中心點的改變) | [NSValue valueWithCGPoint:CGPointMake(300, 300)]; |
contents | 內容,比如UIImageView的圖片 | imageAnima.toValue = (id)[UIImage imageNamed:@"to"].CGImage; |
opacity | 透明度 | @(0.7) |
contentsRect.size.width | 橫向拉伸縮放 | @(0.4)最好是0~1之間的 |
//1、移動
CABasicAnimation *moveAnimate=[CABasicAnimation animationWithKeyPath:@"position"];
//動畫時長
moveAnimate.duration=2.0;
//動畫重復次數
moveAnimate.repeatCount=HUGE_VALF;
//動畫開始時間
moveAnimate.beginTime=CACurrentMediaTime()+2;
//是否自動執行逆動畫
moveAnimate.autoreverses=YES;
//動畫執行完后會回到初始狀態,需要設置這兩個屬性
moveAnimate.removedOnCompletion=NO;
moveAnimate.fillMode=kCAFillModeForwards;
//設置動畫初始位置
moveAnimate.fromValue=[NSValue valueWithCGPoint:imagetemp.layer.position];
//設置動畫目的位置
moveAnimate.toValue=[NSValue valueWithCGPoint:CGPointMake(50, 50)];
//設置動畫速率
moveAnimate.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
//添加動畫
[imagetemp.layer addAnimation:moveAnimate forKey:@"move-layer"];
//2、縮放
CABasicAnimation *scaleAnimate=[CABasicAnimation animationWithKeyPath:@"transform.scale"];
//動畫時長
scaleAnimate.duration=2.0;
//動畫重復次數
scaleAnimate.repeatCount=HUGE_VALF;
//動畫開始時間
scaleAnimate.beginTime=CACurrentMediaTime()+2;
//是否自動執行逆動畫
scaleAnimate.autoreverses=YES;
//動畫執行完后會回到初始狀態,需要設置這兩個屬性
scaleAnimate.removedOnCompletion=NO;
scaleAnimate.fillMode=kCAFillModeForwards;
//設置動畫初始位置
scaleAnimate.fromValue=[NSNumber numberWithFloat:1.0];
//設置動畫目的位置
scaleAnimate.toValue=[NSNumber numberWithFloat:5.0];
//設置動畫速率
scaleAnimate.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
//添加動畫
[imagetemp.layer addAnimation:scaleAnimate forKey:@"scale-layer"];
//3、旋轉
CABasicAnimation *rotateAnimate=[CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
//動畫時長
rotateAnimate.duration=2.0;
//動畫重復次數
rotateAnimate.repeatCount=HUGE_VALF;
//動畫開始時間
rotateAnimate.beginTime=CACurrentMediaTime()+2;
//是否自動執行逆動畫
rotateAnimate.autoreverses=YES;
//動畫執行完后會回到初始狀態,需要設置這兩個屬性
rotateAnimate.removedOnCompletion=NO;
rotateAnimate.fillMode=kCAFillModeForwards;
//設置動畫初始位置
rotateAnimate.fromValue=[NSNumber numberWithFloat:0];
//設置動畫目的位置
rotateAnimate.toValue=[NSNumber numberWithFloat:M_PI];
//設置動畫速率
rotateAnimate.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
//添加動畫
[imagetemp.layer addAnimation:rotateAnimate forKey:@"rotate-layer"];
//4、漸隱動畫
CABasicAnimation *opacityAnimate=[CABasicAnimation animationWithKeyPath:@"opacity"];
//動畫時長
opacityAnimate.duration=2.0;
//動畫重復次數
opacityAnimate.repeatCount=HUGE_VALF;
//動畫開始時間
opacityAnimate.beginTime=CACurrentMediaTime()+2;
//是否自動執行逆動畫
opacityAnimate.autoreverses=YES;
//動畫執行完后會回到初始狀態,需要設置這兩個屬性
opacityAnimate.removedOnCompletion=NO;
opacityAnimate.fillMode=kCAFillModeForwards;
//設置動畫初始位置
opacityAnimate.fromValue=[NSNumber numberWithFloat:0];
//設置動畫目的位置
opacityAnimate.toValue=[NSNumber numberWithFloat:1];
//設置動畫速率
opacityAnimate.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
//添加動畫
[imagetemp.layer addAnimation:opacityAnimate forKey:@"opacity-layer"];
//5、組合動畫
CAAnimationGroup *group=[CAAnimationGroup animation];
//動畫時長
group.duration=2.0;
//動畫重復次數
group.repeatCount=HUGE_VALF;
group.animations=[NSArray arrayWithObjects:moveAnimate,scaleAnimate,rotateAnimate,opacityAnimate, nil];
//添加動畫
[imagetemp.layer addAnimation:group forKey:@"group-layer"];
//6、設置委托,添加CAAnimationDelegate,監測開始和結束事件
group.delegate=self;
- (void)animationDidStart:(CAAnimation *)theAnimation {
//動畫開始了
}
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
//動畫結束了
}