iPhone應用程序之CoreAnimation應用和使用方法是本文要介紹的內容,CoreAnimation是蘋果對用戶界面動畫的封裝,它的framework是QuartzCore.framework。使用時須要將這個庫添加的工程,咱們一塊兒來看內容詳解。 算法
一、CALayerCALayer的絕大多數的屬性都支持動畫,對這些值直接進行設置會隱式的調用動畫效果,只不過動畫的持續時間(duration)較 短,幾乎看不出效果。若是要達到明顯的動畫效果,就須要顯式的調用動畫。 動畫
經常使用的屬性: spa
- @property CGRect bounds;
- @property CGPoint position;
- @property CATransform3D transform;
如何調動畫? code
- - (void)addAnimation:(CAAnimation *)anim forKey:(NSString *)key
其中anim是本身建立的動畫對象,繼承於CAAnimation。key是動畫的鍵,通常是nil,或本身設定的值,意義不大。 orm
二、CAAnimationCAAnimation是全部動畫類的基類,通常不會直接使用。它提供給全部子類的一個頗有用的屬性是 對象
- @property(retain) CAMediaTimingFunction *timingFunction; timingFunction
是一個CAMediaTimingFunction對象,通常這樣建立: 繼承
- [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
- kCAMediaTimingFunctionEaseIn
能夠替換爲一下值 animation
- :NSString * const kCAMediaTimingFunctionLinear;
- NSString * const kCAMediaTimingFunctionEaseIn;
- NSString * const kCAMediaTimingFunctionEaseOut;
- NSString * const kCAMediaTimingFunctionEaseInEaseOut;
三、CABaseAnimation基本的動畫,直接做用於CALayer的對象的各類屬性。 下面是讓一個layer由藍色漸漸變爲透明的效果動畫 it
- CABasicAnimation *ani = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
- ani.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
- ani.fromValue = [UIColor blueColor].CGColor;
- ani.toValue = [UIColor clearColor].CGColor;
- ani.duration = 3;
- [view1.layer addAnimation:ani forKey:@"ani1"];
指定要進行動畫的屬性,好比上例中要對layer的backgroundColor屬性進行變化。 io
- + (id)animationWithKeyPath:(NSString *)path;
path指定要變化的屬性路徑,好比@「bounds」,@「bounds.size.width」等。
這三個屬性只須要提供1個或2個就能夠了
- :@property(retain) id fromValue, toValue, byValue;
具體的做用是: 若是有fromValue和toValue,那麼動畫就是由fromValue變化到toValue。
若是有fromValue和byValue,那麼動畫就是由fromValue變化到fromValue+byValue。
若是隻有toValue,那麼動畫就是由當前的值變化到toValue。 若是隻有byValue,那麼動畫就是由當前的值變化到當前值+byValue。
你能夠這麼想像:當CALayer對象中添加了一個動畫後,系統會開啓一個定時器,不斷刷新layer的屬性的值,其值由fromValue和toValue根據必定的插值算法來計算出來的。 只是想像,layer的屬性在動畫過程當中並無改變,這些顯示效果都是由GPU完成的,不會改變layer的屬性值,若是必要你必須自 己設定layer的屬性。
四、CAKeyframeAnimation關鍵幀動畫 有時你或許須要一個非固定方向的動畫,好比讓一個layer先向右移動100個像素,而後在向下移動100個像素。這時就能夠用關鍵 幀動畫。
- CAKeyframeAnimation *ani = [CAKeyframeAnimation animationWithKeyPath:@"position"];
- ani.values = [NSArray arrayWithObjects:
- NSValue valueWithCGPoint:CGPointMake(100,200)],
- [NSValue valueWithCGPoint:CGPointMake(200,200)],
- [NSValue valueWithCGPoint:CGPointMake(200,300)], nil];
- ani.duration = 3; [view1.layer addAnimation:ani forKey:@"ani2"];
六、UIView的動畫支持UIView能夠直接支持view的動畫,能夠影響多個View。
動畫是線性變化的,默認 動畫開始變化慢,愈來愈快 動畫開始變化快,愈來愈慢 慢入慢出,先慢再快,最後又慢,比較經常使用
- [UIView beginAnimations:nil context:nil];
- [UIView setAnimationDuration:0.3];
- //一些view的操做
- view.frame = xxx; [UIView commitAnimations];
小結:iPhone應用程序之CoreAnimation應用和使用方法的內容介紹完了,但願本文對你有所幫助!