在IOS中如果使用普通的動畫則可以使用UIKit提供的動畫方式來實現,如果想實現更複雜的效果,則需要使用Core Animation了。

 

在Core Animation中我們經常使用的是

 

CABasicAnimation CAKeyframeAnimation CATransitionAnimation
其中CABasicAnimation和CAKeyframeAnimation是對圖層中的不同屬性進行動畫的。

 

如果要多整個圖層進行動畫,則應該使用CATransitionAnimation

 

如果要使用組合動畫,例如要改變圖層的大小和透明度,則可以先為每個屬性創建一個CABasicAnimation物件,再把他們組合到CAAnimationGroup中,最後把這個組合添加到要進行動畫的CALayer中。

 

注:CAAnimation(以及CAAnimation的子類),全部都是顯式動畫,這樣動畫播放後,表現層回恢復到模型層的原始狀態,這就意味著,如果動畫播放完後,會恢復到原來的樣子,所以在動畫播放完後要對模型層進行修改,例如:self.view.layer.backgroundColor=[UIColor blueColor].CGColor;

 

1、自訂動畫:CABasicAnimation
view sourceprint?
01.
-(void)animationOfCABasicAnimation
02.
{
03.
//創建一個CABasicAnimation物件
04.
CABasicAnimation *animation=[CABasicAnimation animation];
05.
//設置顏色
06.
animation.toValue=(id)[UIColor blueColor].CGColor;
07.
//動畫時間
08.
animation.duration=1;
09.
//是否反轉變為原來的屬性值
10.
animation.autoreverses=YES;
11.
//把animation添加到圖層的layer中,便可以播放動畫了。forKey指定要應用此動畫的屬性
12.
[self.view.layer addAnimation:animation forKey:@"backgroundColor"];
13.

 

14.
}
2、關鍵幀動畫:CAKeyframeAnimation
1. path

 

這是一個 CGPathRef 物件,預設是空的,當我們創建好CAKeyframeAnimation的實例的時候,可以通過制定一個自己定義的path來讓 某一個物體按照這個路徑進行動畫。這個值預設是nil 當其被設定的時候 values 這個屬性就被覆蓋

 

2. values

 

一個陣列,提供了一組關鍵幀的值, 當使用path的 時候 values的值自動被忽略。

 

下面是改變依次改變view的顏色

 

view sourceprint?
01.
-(void)animationOfCAKeyframeAnimation
02.
{
03.
CAKeyframeAnimation *animation=[CAKeyframeAnimation animation];
04.
//設置屬性值
05.
animation.values=[NSArray arrayWithObjects:
06.
(id)self.view.backgroundColor,
07.
(id)[UIColor yellowColor].CGColor,
08.
(id)[UIColor greenColor].CGColor,
09.
(id)[UIColor blueColor].CGColor,nil];
10.
animation.duration=3;
11.
animation.autoreverses=YES;
12.
//把關鍵幀添加到layer中
13.
[self.view.layer addAnimation:animation forKey:@"backgroundColor"];
14.
}
3、使用路徑製作動畫:CAKeyframeAnimation
view sourceprint?
01.
-(void)animationOfCAKeyframeAnimationPath
02.
{
03.
//初始化一個View,用來顯示動畫
04.
UIView *redView=[[UIView alloc]initWithFrame:CGRectMake(10, 10, 20, 20)];
05.
redView.backgroundColor=[UIColor redColor];
06.

 

07.
[self.view addSubview:redView];
08.

 

09.
CAKeyframeAnimation *ani=[CAKeyframeAnimation animation];
10.
//初始化路徑
11.
CGMutablePathRef aPath=CGPathCreateMutable();
12.
//動畫起始點
13.
CGPathMoveToPoint(aPath, nil, 20, 20);
14.
CGPathAddCurveToPoint(aPath, nil,
15.
160, 30,//控制點
16.
220, 220,//控制點
17.
240, 380);//控制點
18.

 

19.
ani.path=aPath;
20.
ani.duration=10;
21.
//設置為漸出
22.
ani.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
23.
//自動旋轉方向
24.
ani.rotationMode=@"auto";
25.

 

26.
[redView.layer addAnimation:ani forKey:@"position"];
27.
}
源碼下載:點擊下載源碼

 

原文:HTTP://blog.csdn.net/kqjob/article/details/10417461

 

---文章完---

 

最後,推薦一個神器。

 

內測寶
內測寶, 個人覺得比TestFlight更簡單好用,開發者只需要簡單把打好的ipa包上傳上去,生成二維碼,測試人員在手機上掃碼二維碼,就可以直接安裝最新的測試版本了,好用的讓人想哭。
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()