核心動畫(一)

1.jpg
1.jpg

一、Core Animation簡介

  • Core Animation,中文翻譯為核心動畫,它是一組非常強(qiáng)大的動畫處理API,使用它能做出非常炫麗的動畫效果,而且往往是事半功倍。即,使用少量的代碼就可以實(shí)現(xiàn)非常強(qiáng)大的功能。
  • Core Animation可以用在Mac OS X和iOS平臺。
  • Core Animation的動畫執(zhí)行過程都是在后臺操作的,不會阻塞主線程。
  • 要注意的是,Core Animation是直接作用在CALayer上的,并非UIView。

二、CAAnimation的繼承關(guān)系

Snip20150718_1.png
Snip20150718_1.png
  • 核心動畫中所有類都遵守CAMediaTiming協(xié)議
  • CAAnaimation是個抽象類,不具備動畫效果,必須用它的子類才有動畫效果,CAAnimationGroupCATransition才有動畫效果。
    • CAAnimationGroup是個動畫組,可以同時進(jìn)行縮放,旋轉(zhuǎn)。
    • CATransition是轉(zhuǎn)場動畫界面之間跳轉(zhuǎn)都可以用轉(zhuǎn)場動畫。
  • CAPropertyAnimation也是個抽象類,本身不具備動畫效果,只有子類才有,CABasicAnimationCAKeyframeAnimation
    • CABasicAnimation基本動畫,做一些簡單效果
    • CAKeyframeAnimation幀動畫,做一些連續(xù)的流暢的動畫
    • 它有個NSString類型的keyPath屬性,你可以指定CALayer的某個屬性名為keyPath,并且對CALayer的這個屬性的值進(jìn)行修改,達(dá)到相應(yīng)的動畫效果。比如,指定@"position"keyPath,就會修改CALayer的position屬性的值,以達(dá)到平移的動畫效果
    • 因此,初始化好CAPropertyAnimation的子類對象后,必須先設(shè)置keyPath,搞清楚要修改的是CALayer的哪個屬性,執(zhí)行的是怎樣的動畫

三、添加步驟

(注意:Xcode5之后不用添加QuartzCore.framework框架和引入主頭文件<QuartzCore/QuartzCore.h>)
  • 1.首先得有CALayer
  • 2.初始化一個CAAnimation對象,并設(shè)置一些動畫相關(guān)屬性
  • 3.通過調(diào)用CALayer的addAnimation:forKey:方法,增加CAAnimation對象到CALayer中,這樣就能開始執(zhí)行動畫了
  • 4.通過調(diào)用CALayer的removeAnimationForKey:方法可以停止CALayer中的動畫

四、相關(guān)屬性

  • duration:動畫的持續(xù)時間

  • repeatCount:重復(fù)次數(shù),無限循環(huán)可以設(shè)置HUGE_VALF或者MAXFLOAT

  • repeatDuration:重復(fù)時間

  • removedOnCompletion:默認(rèn)為YES,代表動畫執(zhí)行完畢后就從圖層上移除,圖形會恢復(fù)到動畫執(zhí)行前的狀態(tài)。如果想讓圖層保持顯示動畫執(zhí)行后的狀態(tài),那就設(shè)置為NO,不過還要設(shè)置fillModekCAFillModeForwards

  • fillMode:決定當(dāng)前對象在非active時間段的行為。比如動畫開始之前或者動畫結(jié)束之后

  • beginTime:可以用來設(shè)置動畫延遲執(zhí)行時間,若想延遲2s,就設(shè)置為CACurrentMediaTime()+2,CACurrentMediaTime()為圖層的當(dāng)前時間

  • timingFunction:速度控制函數(shù),控制動畫運(yùn)行的節(jié)奏
    delegate:動畫代理

  • fillMode屬性值(要想fillMode有效,最好設(shè)置removedOnCompletion = NO

  • delegate:動畫代理,用來監(jiān)聽動畫的執(zhí)行過程
    代理對象需要實(shí)現(xiàn)的方法有:(這幾個方法被定義在某個分類中)

@interface NSObject (CAAnimationDelegate)
// 動畫開始執(zhí)行的時候觸發(fā)這個方法
- (void)animationDidStart:(CAAnimation *)anim;
// 動畫執(zhí)行完畢的時候觸發(fā)這個方法
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Core Animation,中文翻譯為核心動畫,它是一組非常強(qiáng)大的動畫處理API,使用它能做出非常炫麗的動畫效果...
    iYeso閱讀 287評論 1 1
  • 在iOS實(shí)際開發(fā)中常用的動畫無非是以下四種:UIView動畫,核心動畫,幀動畫,自定義轉(zhuǎn)場動畫。 1.UIView...
    請叫我周小帥閱讀 3,313評論 1 23
  • 記錄一下學(xué)習(xí)的筆記 核心動畫 核心動畫基本概念 基本動畫 關(guān)鍵幀動畫 動畫組 轉(zhuǎn)場動畫 Core Animatio...
    耿杰閱讀 1,118評論 0 1
  • Core Animation Core Animation,中文翻譯為核心動畫,它是一組非常強(qiáng)大的動畫處理API,...
    45b645c5912e閱讀 3,151評論 0 21
  • 一、簡介 Core Animation,中文翻譯為核心動畫,它是一組非常強(qiáng)大的動畫處理API,使用它能做出非常炫麗...
    莦婼姑娘閱讀 1,053評論 0 4

友情鏈接更多精彩內(nèi)容