在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
-(void)animationOfCABasicAnimation { //建立一個CABasicAnimation物件 CABasicAnimation *animation=[CABasicAnimation animation]; //設定顏色 animation.toValue=(id)[UIColor blueColor].CGColor; //動畫時間 animation.duration=1; //是否反轉變為原來的屬性值 animation.autoreverses=YES; //把animation新增到圖層的layer中,便可以播放動畫了。forKey指定要應用此動畫的屬性 [self.view.layer addAnimation:animation forKey:@"backgroundColor"]; }
2、關鍵幀動畫:CAKeyframeAnimation
1. path
這是一個 CGPathRef 物件,預設是空的,當我們建立好CAKeyframeAnimation的例項的時候,可以透過制定一個自己定義的path來讓 某一個物體按照這個路徑進行動畫。這個值預設是nil 當其被設定的時候 values 這個屬性就被覆蓋
2. values
一個陣列,提供了一組關鍵幀的值, 當使用path的 時候 values的值自動被忽略。
下面是改變依次改變view的顏色
-(void)animationOfCAKeyframeAnimation { CAKeyframeAnimation *animation=[CAKeyframeAnimation animation]; //設定屬性值 animation.values=[NSArray arrayWithObjects: (id)self.view.backgroundColor, (id)[UIColor yellowColor].CGColor, (id)[UIColor greenColor].CGColor, (id)[UIColor blueColor].CGColor,nil]; animation.duration=3; animation.autoreverses=YES; //把關鍵幀新增到layer中 [self.view.layer addAnimation:animation forKey:@"backgroundColor"]; }
3、使用路徑製作動畫:CAKeyframeAnimation
-(void)animationOfCAKeyframeAnimationPath { //初始化一個View,用來顯示動畫 UIView *redView=[[UIView alloc]initWithFrame:CGRectMake(10, 10, 20, 20)]; redView.backgroundColor=[UIColor redColor]; [self.view addSubview:redView]; CAKeyframeAnimation *ani=[CAKeyframeAnimation animation]; //初始化路徑 CGMutablePathRef aPath=CGPathCreateMutable(); //動畫起始點 CGPathMoveToPoint(aPath, nil, 20, 20); CGPathAddCurveToPoint(aPath, nil, 160, 30,//控制點 220, 220,//控制點 240, 380);//控制點 ani.path=aPath; ani.duration=10; //設定為漸出 ani.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; //自動旋轉方向 ani.rotationMode=@"auto"; [redView.layer addAnimation:ani forKey:@"position"]; }
原始碼下載:點選下載原始碼
原文:http://blog.csdn.net/kqjob/article/details/10417461
---文章完---
最後,推薦一個神器。
內測寶
內測寶, 個人覺得比TestFlight更簡單好用,開發者只需要簡單把打好的ipa包上傳上去,生成二維碼,測試人員在手機上掃碼二維碼,就可以直接安裝最新的測試版本了,好用的讓人想哭。