iOS核心動畫基本概念

Core Animation,中文翻譯爲核心動畫,它是一組很是強大的動畫處理API,使用它能作出很是炫麗的動畫效果,並且每每是事半功倍。也就是說,使用少許的代碼就能夠實現很是強大的功能。 面試

1、核心動畫

核心動畫基本概念算法

基本動畫swift

關鍵幀動畫數組

動畫組bash

轉場動畫數據結構

Core Animation是一組很是強大的動畫處理API,使用它能作出很是炫麗的動畫效果,並且每每是事半功倍! 使用它須要先添加QuartzCore.framework和引入對應的框架<QuartzCore/QuartzCore.h>併發

開發步驟:框架

一、初始化一個動畫對象(CAAnimation)並設置一些動畫相關屬性 二、CALayer中不少屬性均可以經過CAAnimation實現動畫效果,包括:opacity、position、transform、bounds、contents等(能夠在API文檔中搜索:CALayer Animatable Properties) 三、添加動畫對象到層(CALayer)中,開始執行動畫 四、經過調用CALayer的addAnimation:forKey增長動畫到層(CALayer)中,這樣就能觸發動畫了。經過調用removeAnimationForKey能夠中止層中的動畫 五、Core Animation的動畫執行過程都是在後臺操做的,不會阻塞主線程函數

小編給你們推薦一個iOS技術交流羣:923910776!羣內提供數據結構與算法、底層進階、swift、逆向、整合面試題等免費資料!

2、CAAnimation——簡介

l 是全部動畫對象的父類,負責控制動畫的持續時間和速度,是個抽象類,不能直接使用,應該使用它具體的子類動畫

l 屬性說明:(紅色表明來自CAMediaTiming協議的屬性)

  • duration:動畫的持續時間
  • repeatCount:重複次數,無限循環能夠設置HUGE_VALF或者MAXFLOAT
  • repeatDuration:重複時間
  • removedOnCompletion:默認爲YES,表明動畫執行完畢後就從圖層上移除,圖形會恢復到動畫執行前的狀態。若是想讓圖層保持顯示動畫執行後的狀態,那就設置爲NO,同時還要設置fillMode爲kCAFillModeForwards
  • fillMode:決定當前對象在非active時間段的行爲。好比動畫開始以前或者動畫結束以後
  • beginTime:能夠用來設置動畫延遲執行時間,若想延遲2s,就設置爲CACurrentMediaTime()+2,CACurrentMediaTime()爲圖層的當前時間
  • timingFunction:速度控制函數,控制動畫運行的節奏
  • delegate:動畫代理

3、CABasicAnimation——基本動畫

l 基本動畫,是CAPropertyAnimation的子類 l 屬性說明:

  • fromValue:keyPath屬性的初始值
  • toValue:keyPath屬性的結束值
  • byValue:keyPath屬性的變化值(使用較少)

l 動畫過程說明:

  • 隨着動畫的進行,在長度爲duration的持續時間內,keyPath相應屬性的值從fromValue漸漸地變爲toValue
  • keyPath內容是CALayer的可動畫Animatable屬性
  • 若是fillMode=kCAFillModeForwards同時removedOnComletion=NO,那麼在動畫執行完畢後,圖層會保持顯示動畫執行後的狀態。但在實質上,圖層的屬性值仍是動畫執行前的初始值,並無真正被改變。

4、CAKeyframeAnimation——關鍵幀動畫

l 關鍵幀動畫,也是CAPropertyAnimation的子類,與CABasicAnimation的區別是:

  • CABasicAnimation只能從一個數值(fromValue)變到另外一個數值(toValue),而CAKeyframeAnimation會使用一個NSArray保存這些數值

l 屬性說明:

  • values:上述的NSArray對象。裏面的元素稱爲「關鍵幀」(keyframe)。動畫對象會在指定的時間(duration)內,依次顯示values數組中的每個關鍵幀

  • path:能夠設置一個CGPathRef、CGMutablePathRef,讓圖層按照路徑軌跡移動。path只對CALayer的anchorPoint和position起做用。若是設置了path,那麼values將被忽略

  • keyTimes:能夠爲對應的關鍵幀指定對應的時間點,其取值範圍爲0到1.0,keyTimes中的每個時間值都對應values中的每一幀。若是沒有設置keyTimes,各個關鍵幀的時間是平分的

l CABasicAnimation可看作是隻有2個關鍵幀的CAKeyframeAnimation

5、CAAnimationGroup——動畫組

l 動畫組,是CAAnimation的子類,能夠保存一組動畫對象,將CAAnimationGroup對象加入層後,組中全部動畫對象能夠同時併發運行

l 屬性說明:

  • animations:用來保存一組動畫對象的NSArray

  • 默認狀況下,一組動畫對象是同時運行的,也能夠經過設置動畫對象的beginTime屬性來更改動畫的開始時間

6、CATransition——轉場動畫

l CATransition是CAAnimation的子類,用於作轉場動畫,可以爲層提供移出屏幕和移入屏幕的動畫效果。iOS比Mac OS X的轉場動畫效果少一點

l UINavigationController就是經過CATransition實現了將控制器的視圖推入屏幕的動畫效果

l 動畫屬性:

  • type:動畫過渡類型

  • subtype:動畫過渡方向

  • startProgress:動畫起點(在總體動畫的百分比)

  • endProgress:動畫終點(在總體動畫的百分比) -轉場動畫過渡效果 :

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 界面切換的代碼
    static int i = 2;
    NSString *imageName = [NSString stringWithFormat:@"%d",i];
    _imageView.image = [UIImage imageNamed:imageName];

    i++;

    if (i > 3) {
        i = 1;
    }

    // 只要切換界面 均可以使用轉場動畫
    // 誰切換界面 就添加到誰上
    // 轉場動畫代碼必須和界面切換的代碼放在一塊兒

    // 轉場動畫
    CATransition *anim = [CATransition animation];

    // 指定轉場類型
    anim.type = @"pageCurl";
    // 設置轉場的方向
    anim.subtype = kCATransitionFromLeft;

    // 設置動畫的進度
    anim.startProgress = 0.5;

    anim.endProgress = 0.8;

    anim.duration = 3;

    [_imageView.layer addAnimation:anim forKey:nil];
}
複製代碼

核心動畫一切都是假象,因此並不會真實的修改layer的屬性, UIView真實改變屬性纔能有動畫,何時使用核心動畫,何時使用UIView,若是之後在執行動畫的過程當中,不須要與用戶交互,用核心動畫就好了,核心動畫使用場景: 轉場動畫用的最多。

相關文章
相關標籤/搜索