iOS核心動畫Core Animation(一)

核心動畫Core Animation(一)數組

1、簡述併發

Core Animation是直接做用在CALayer上的(並不是UIView上)很是強大的跨Mac OS X和iOS平臺的動畫處理API,Core Animation的動畫執行過程都是在後臺操做的,不會阻塞主線程。框架

2、核心動畫常識
列舉處核心動畫的一些常識知識。
核心動畫的本質:在後臺移動圖層中的內容,  執行完畢後圖層自己的位置並無發生變化。
若是是Xcode6以前的版本,要導入<QuartzCore/QuartzCore.h>框架,iOS7+不須要。
Core Animation的動畫執行過程都是在後臺操做的,不會阻塞主線程。
全部的UI操做都是在主線程進行,後臺指的是其餘線程.
全部動畫對象的父類,負責控制動畫的持續時間和速度,是個抽象類,不能直接使用,應該使用它具體的子類
Core Animation是直接做用在CALayer上的,並不是UIView。
 默認動畫時長是0.25秒。經過 duration 屬性自定義時長(單位:秒  )
當把動畫對象添加到 CALayer 中後, 馬上啓動動畫
動畫執行完畢之後, 又回到的原來的位置。
解決1:當動畫執行完畢之後再設置位置爲最終的位置。
解決2:動畫執行完畢後設置 fillMode
3、核心動畫結構解析和屬性解析。  
根據繼承結構,能夠查看Xcode爲咱們準備的關於Core Animation的SDK文件,能夠獲得一些屬性和方法。
屬性解析:(紅色表明來自CAMediaTiming協議的屬性)
◆duration:動畫的持續時間
◆repeatCount:動畫的重複次數(重複次數,無限循環能夠設置HUGE_VALF或者MAXFLOAT)。
◆repeatDuration:動畫的重複時間
◆removedOnCompletion:默認爲YES,表明動畫執行完畢後就從圖層上移除,圖形會恢復到動畫執行前的狀態。若是想讓圖層保持顯示動畫執行後的狀態,那就設置爲NO,不過還要設置fillMode爲kCAFillModeForwards。
◆fillMode:決定當前對象在非active時間段的行爲.好比動畫開始以前,動畫結束以後
  kCAFillModeRemoved這個是默認值,也就是說當動畫開始前和動畫結束後,動畫對layer都沒有影響,動畫結束後,layer會恢復到以前的狀態
   kCAFillModeforwards當動畫結束後,layer會一直保持着動畫最後的狀態
   kCAFillModeBackwards 在動畫開始前,只須要將動畫加入了一個layer,layer便當即進入動畫的初始狀態並等待動畫開始。
   kCAFillModeBoth 這個其實就是上面兩個的合成.動畫加入後開始以前,layer便處於動畫初始狀態,動畫結束後layer保持動畫最後的狀態
CAMediaTimingFunction:速度控制函數
   kCAMediaTimingFunctionLinear(線性):勻速,給你一個相對靜態的感受
  kCAMediaTimingFunctionEaseIn(漸進):動畫緩慢進入,而後加速離開
  kCAMediaTimingFunctionEaseOut(漸出):動畫全速進入,而後減速的到達目的地
   kCAMediaTimingFunctionEaseInEaseOut(漸進漸出):動畫緩慢的進入,中間加速,而後減速的到達目的地。這個是默認的動畫行爲。
◆beginTime:能夠用來設置動畫延遲執行時間,若想延遲2s,就設置爲CACurrentMediaTime()+2,CACurrentMediaTime()爲圖層的當前時間
◆timingFunction:速度控制函數,控制動畫運行的節奏
◆delegate:動畫代理(能夠經過代理方法在動畫執行的先後執行其餘操做)
 //CAAnimation代理方法
- (void)animationDidStart:(CAAnimation *)anim;

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;

CAPropertyAnimation 函數

■是CAAnimation的子類,也是個抽象類,要想建立動畫對象,應該使用它的兩個子類:CABasicAnimation和CAKeyframeAnimation
■屬性解析:
◆keyPath:經過指定CALayer的一個屬性名稱爲keyPath(NSString類型),而且對CALayer的這個屬性的值進行修改,達到相應的動畫效果。好比,指定@」position」爲keyPath,就修改CALayer的position屬性的值,以達到平移的動畫效果。經常使用的keyPath有 position ,transform.scale,transform.rotation.
CABasicAnimation 基本動畫
■是CApropertyAnimation的子類,
■屬性解析:
◆fromValue:keyPath相應屬性的初始值
◆toValue:keyPath相應屬性的結束值
■隨着動畫的進行,在長度爲duration的持續時間內,keyPath相應屬性的值從fromValue漸漸地變爲toValue
■若是fillMode=kCAFillModeForwards和removedOnComletion=NO,那麼在動畫執行完畢後,圖層會保持顯示動畫執行後的狀態。但在實質上,圖層的屬性值仍是動畫執行前的初始值,並無真正被改變。好比,CALayer的position初始值爲(0,0),CABasicAnimation的fromValue爲(10,10),toValue爲(100,100),雖然動畫執行完畢後圖層保持在(100,100)這個位置,實質上圖層的position仍是爲(0,0)
CAKeyframeAnimation  關鍵幀動畫
■CApropertyAnimation的子類,跟CABasicAnimation的區別是:CABasicAnimation只能從一個數值(fromValue)變到另外一個數值(toValue),而CAKeyframeAnimation會使用一個NSArray保存這些數值,經過數組實現動畫效果。
■屬性解析:
◆values:就是上述的NSArray對象。裏面的元素稱爲」關鍵幀」(keyframe)。動畫對象會在指定的時間(duration)內,依次顯示values數組中的每個關鍵幀
◆path:能夠設置一個CGPathRef\CGMutablePathRef,讓層跟着路徑移動。path只對CALayer的anchorPoint和position起做用。若是你設置了path,那麼values將被忽略
◆keyTimes:能夠爲對應的關鍵幀指定對應的時間點,其取值範圍爲0到1.0,keyTimes中的每個時間值都對應values中的每一幀.當keyTimes沒有設置的時候,各個關鍵幀的時間是平分的
■CABasicAnimation可看作是最多隻有2個關鍵幀的CAKeyframeAnimation

CAAnimationGroup  動畫組動畫

■CAAnimation的子類,能夠保存一組動畫對象,將CAAnimationGroup對象加入層後,組中全部動畫對象能夠同時併發運行
■屬性解析:
◆animations:用來保存一組動畫對象的數組。
■默認狀況下,一組動畫對象是同時運行的,也能夠經過設置動畫對象的beginTime屬性來更改動畫的開始時間 

CATransition  轉場動畫url

■CAAnimation的子類,用於作轉場動畫,可以爲層提供移出屏幕和移入屏幕的動畫效果。iOS比Mac OS X的轉場動畫效果少一點
■UINavigationController就是經過CATransition實現了將控制器的視圖推入屏幕的動畫效果
■屬性解析:
◆type:動畫過渡類型 , 轉場動畫的類型(NSString *type)

fade : 交叉淡化過渡spa

push : 新視圖把舊視圖推出去線程

moveIn: 新視圖移到舊視圖上面代理

reveal: 將舊視圖移開,顯示下面的新視圖code

cube : 立方體翻滾效果

oglFlip : 上下左右翻轉效果

suckEffect : 收縮效果,如一塊布被抽走

rippleEffect: 水滴效果

pageCurl : 向上翻頁效果

pageUnCurl : 向下翻頁效果

cameraIrisHollowOpen : 相機鏡頭打開效果

cameraIrisHollowClos : 相機鏡頭關閉效果

 轉場動畫的方向(NSString *subtype)

從某個方向開始:fromLeftfromRightfromTop ,fromBottom

◆subtype:動畫過渡方向
◆startProgress:動畫起點(在總體動畫的百分比)
◆endProgress:動畫終點(在總體動畫的百分比)
相關文章
相關標籤/搜索