核心動畫

四箕戳、動畫

實踐下 iOS核心動畫高級技巧(顏色漸變)
CAShapeLayer(自己的筆記)

1请敦、學動畫先從POP開始 - 開篇
2、學動畫先從POP開始 深入淺出(登錄按鈕pop動畫)
7、從Core Animation到Facebook‘s Pop(1)
8、POP動畫引擎中Layer與CALayer的一點區(qū)別

3涛舍、CABasicAnimation使用總結
4、iOS 動畫從入門到無需可入!
5唆途、核心動畫(自己的筆記)
6富雅、CALayer(自己的筆記)

9、GeekBand - iOS 動畫全面總結
10 肛搬、老司機帶你走進Core Animation 之幾種動畫的簡單應用
11没佑、老司機帶你走進Core Animation 之粒子發(fā)射、TileLayer與異步繪制
12温赔、Core Animation Rao神iOS基礎
13蛤奢、放肆的使用UIBezierPath和CAShapeLayer畫各種圖形
14、iOS繪圖—— UIBezierPath 和 Core Graphics

Core Animation簡介
Core Animation陶贼,中文翻譯為核心動畫啤贩,它是一組非常強大的動畫處理API,使用它能做出非常炫麗的動畫效果骇窍,而且往往是事半功倍瓜晤。也就是說锥余,使用少量的代碼就可以實現(xiàn)非常強大的功能腹纳。
Core Animation可以用在Mac OS X和iOS平臺。
Core Animation的動畫執(zhí)行過程都是在后臺操作的驱犹,不會阻塞主線程嘲恍。
要注意的是,Core Animation是直接作用在CALayer上的雄驹,并非UIView佃牛。

掌握
核心動畫基本概念
基本動畫, 關鍵幀動畫, 動畫組, 轉場動畫

核心動畫繼承結構圖

核心動畫繼承結構.jpeg

一、Core Animation的使用步驟
1.首先得有CALayer
2.初始化一個CAAnimation對象医舆,并設置一些動畫相關屬性
3.通過調(diào)用CALayer的addAnimation:forKey:方法俘侠,增加CAAnimation對象到CALayer中象缀,這樣就能開始執(zhí)行動畫了
4.通過調(diào)用CALayer的removeAnimationForKey:方法可以停止CALayer中的動畫

二、CAAnimation 簡介

是所有動畫對象的父類爷速,負責控制動畫的持續(xù)時間和速度央星,是個抽象類,不能直接使用惫东,應該使用它具體的子類
屬性說明:

1. duration:動畫的持續(xù)時間
2. repeatCount:重復次數(shù)莉给,無限循環(huán)可以設置HUGE_VALF或者MAXFLOAT
3. repeatDuration:重復時間
4. fillMode:決定當前對象在非active時間段的行為。比如動畫開始之前或者動畫結束之后
5. beginTime:可以用來設置動畫延遲執(zhí)行時間廉沮,若想延遲2s颓遏,就設置為CACurrentMediaTime()+2,
CACurrentMediaTime()為圖層的當前時間
(以上來自CAMediaTiming協(xié)議的屬性)
6. removedOnCompletion:默認為YES滞时,代表動畫執(zhí)行完畢后就從圖層上移除叁幢,圖形會恢復到動畫執(zhí)行前的狀態(tài)。
如果想讓圖層保持顯示動畫執(zhí)行后的狀態(tài)坪稽,那就設置為NO遥皂,不過還要設置fillMode為kCAFillModeForwards
7. timingFunction:速度控制函數(shù),控制動畫運行的節(jié)奏
8. delegate:動畫代理

fillMode
removedOnCompletion
timingFunction

三刽漂、CAAnimation 動畫填充模式

fillMode屬性值(要想fillMode有效演训,最好設置removedOnCompletion = NO)

  1. kCAFillModeRemoved 默認值,也就是說當動畫開始前和動畫結束后贝咙,動畫對layer都沒有影響样悟,動畫結束后,layer會恢復到之前的狀態(tài)
  2. kCAFillModeForwards 當動畫結束后庭猩,layer會一直保持著動畫最后的狀態(tài)
  3. kCAFillModeBackwards 在動畫開始前窟她,只需要將動畫加入了一個layer,layer便立即進入動畫的初始狀態(tài)并等待動畫開始蔼水。
  4. kCAFillModeBoth 上面兩個的合成.動畫加入后開始之前震糖,layer便處于動畫初始狀態(tài),動畫結束后layer保持動畫最后的狀態(tài)

CAAnimation 速度控制函數(shù) (CAMediaTimingFunction)

kCAMediaTimingFunctionLinear(線性):勻速趴腋,給你一個相對靜態(tài)的感覺
kCAMediaTimingFunctionEaseIn(漸進):動畫緩慢進入吊说,然后加速離開
kCAMediaTimingFunctionEaseOut(漸出):動畫全速進入,然后減速的到達目的地
kCAMediaTimingFunctionEaseInEaseOut(漸進漸出):動畫緩慢的進入优炬,中間加速颁井,然后減速的到達目的地。這個是默認的動畫行為蠢护。

CAAnimation在分類中定義了代理方法

@interface NSObject (CAAnimationDelegate)
- (void)animationDidStart:(CAAnimation *)anim;
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
@end

CALayer上動畫的暫停和恢復

#pragma mark 暫停CALayer的動畫
-(void)pauseLayer:(CALayer*)layer
{
    CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];

    // 讓CALayer的時間停止走動
      layer.speed = 0.0;
    // 讓CALayer的時間停留在pausedTime這個時刻
    layer.timeOffset = pausedTime;
}

CALayer上動畫的恢復

#pragma mark 恢復CALayer的動畫
-(void)resumeLayer:(CALayer*)layer
{
    CFTimeInterval pausedTime = layer.timeOffset;
    // 1. 讓CALayer的時間繼續(xù)行走
      layer.speed = 1.0;
    // 2. 取消上次記錄的停留時刻
      layer.timeOffset = 0.0;
    // 3. 取消上次設置的時間
      layer.beginTime = 0.0;    
    // 4. 計算暫停的時間(這里也可以用CACurrentMediaTime()-pausedTime)
    CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
    // 5. 設置相對于父坐標系的開始時間(往后退timeSincePause)
      layer.beginTime = timeSincePause;
}

CAPropertyAnimation

是CAAnimation的子類雅宾,也是個抽象類,要想創(chuàng)建動畫對象葵硕,應該使用它的兩個子類:

  1. CABasicAnimation
  2. CAKeyframeAnimation

屬性說明:
keyPath:通過指定CALayer的一個屬性名稱為keyPath(NSString類型)眉抬,并且對CALayer的這個屬性的值進行修改贯吓,達到相應的動畫效果。比如蜀变,指定@“position”為keyPath宣决,就修改CALayer的position屬性的值,以達到平移的動畫效果

keyPath屬性說明:

transform.scale = 比例轉換
transform.rotation = 旋轉
transform.rotation.x = x軸旋轉
transform.rotation.y = y軸旋轉

opacity = 透明度
margin = 邊距
position = 位移
backgroundColor = 背景顏色
cornerRadius = 圓角
borderWidth = 邊框寬度
bounds = 位置昏苏,體積
contents = 內(nèi)容
contentsRect = 面積
frame = 位置尊沸,體積
hidden = 是否隱藏

shadowColor = 陰影顏色
shadowOffset = 陰影偏移
shadowOpacity = 陰影透明

shadowRadius = 陰影半徑

------

一、CABasicAnimation 基本動畫

基本動畫贤惯,是CAPropertyAnimation的子類

屬性說明:
fromValue:keyPath相應屬性的初始值
toValue:keyPath相應屬性的結束值

動畫過程說明:
隨著動畫的進行洼专,在長度為duration的持續(xù)時間內(nèi),keyPath相應屬性的值從fromValue漸漸地變?yōu)閠oValue
keyPath內(nèi)容是CALayer的可動畫Animatable屬性
如果fillMode=kCAFillModeForwards同時removedOnComletion=NO孵构,那么在動畫執(zhí)行完畢后屁商,圖層會保持顯示動畫執(zhí)行后的狀態(tài)。但在實質(zhì)上颈墅,圖層的屬性值還是動畫執(zhí)行前的初始值蜡镶,并沒有真正被改變。

二恤筛、CAKeyframeAnimation關鍵幀動畫

關鍵幀動畫官还,也是CAPropertyAnimation的子類,與CABasicAnimation的區(qū)別是:
CABasicAnimation只能從一個數(shù)值(fromValue)變到另一個數(shù)值(toValue)毒坛,而CAKeyframeAnimation會使用一個NSArray保存這些數(shù)值

屬性說明:
values:上述的NSArray對象望伦。里面的元素稱為“關鍵幀”(keyframe)。動畫對象會在指定的時間(duration)內(nèi)煎殷,依次顯示values數(shù)組中的每一個關鍵幀
path:可以設置一個CGPathRef屯伞、CGMutablePathRef,讓圖層按照路徑軌跡移動豪直。path只對CALayer的anchorPoint和position起作用劣摇。如果設置了path,那么values將被忽略
keyTimes:可以為對應的關鍵幀指定對應的時間點弓乙,其取值范圍為0到1.0末融,keyTimes中的每一個時間值都對應values中的每一幀。如果沒有設置keyTimes唆貌,各個關鍵幀的時間是平分的

注:CABasicAnimation可看做是只有2個關鍵幀的CAKeyframeAnimation

CAAnimationGroup 動畫組

動畫組滑潘,是CAAnimation的子類,可以保存一組動畫對象锨咙,將CAAnimationGroup對象加入層后,組中所有動畫對象可以同時并發(fā)運行

屬性說明:
animations:用來保存一組動畫對象的NSArray
默認情況下追逮,一組動畫對象是同時運行的酪刀,也可以通過設置動畫對象的beginTime屬性來更改動畫的開始時間

三粹舵、轉場動畫 CATransition

CATransition是CAAnimation的子類,用于做轉場動畫骂倘,能夠為層提供移出屏幕和移入屏幕的動畫效果眼滤。iOS比Mac OS X的轉場動畫效果少一點
UINavigationController就是通過CATransition實現(xiàn)了將控制器的視圖推入屏幕的動畫效果
動畫屬性:
type:動畫過渡類型
subtype:動畫過渡方向
startProgress:動畫起點(在整體動畫的百分比)
endProgress:動畫終點(在整體動畫的百分比)

轉場動畫過渡效果

轉場動畫過渡效果.jpeg

使用UIView動畫函數(shù)實現(xiàn)轉場動畫——單視圖

  • (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;

參數(shù)說明:
duration:動畫的持續(xù)時間
view:需要進行轉場動畫的視圖
options:轉場動畫的類型
animations:將改變視圖屬性的代碼放在這個block中
completion:動畫結束后,會自動調(diào)用這個block

使用UIView動畫函數(shù)實現(xiàn)轉場動畫——雙視圖

  • (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion;

參數(shù)說明:
duration:動畫的持續(xù)時間
options:轉場動畫的類型
animations:將改變視圖屬性的代碼放在這個block中
completion:動畫結束后历涝,會自動調(diào)用這個block

CADisplayLink
CADisplayLink是一種以屏幕刷新頻率觸發(fā)的時鐘機制诅需,每秒鐘執(zhí)行大約60次左右
CADisplayLink是一個計時器,可以使繪圖代碼與視圖的刷新頻率保持同步荧库,而NSTimer無法確保計時器實際被觸發(fā)的準確時間
使用方法:
定義CADisplayLink并制定觸發(fā)調(diào)用方法
將顯示鏈接添加到主運行循環(huán)隊列

完堰塌。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市分衫,隨后出現(xiàn)的幾起案子场刑,更是在濱河造成了極大的恐慌,老刑警劉巖蚪战,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牵现,死亡現(xiàn)場離奇詭異,居然都是意外死亡邀桑,警方通過查閱死者的電腦和手機瞎疼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來壁畸,“玉大人丑慎,你說我怎么就攤上這事∪看荩” “怎么了竿裂?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長照弥。 經(jīng)常有香客問我腻异,道長,這世上最難降的妖魔是什么这揣? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任悔常,我火速辦了婚禮,結果婚禮上给赞,老公的妹妹穿的比我還像新娘机打。我一直安慰自己,他們只是感情好片迅,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布残邀。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芥挣。 梳的紋絲不亂的頭發(fā)上驱闷,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天,我揣著相機與錄音空免,去河邊找鬼空另。 笑死,一個胖子當著我的面吹牛蹋砚,可吹牛的內(nèi)容都是我干的扼菠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坝咐,長吁一口氣:“原來是場噩夢啊……” “哼循榆!你這毒婦竟也來了?” 一聲冷哼從身側響起畅厢,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤冯痢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后框杜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浦楣,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年咪辱,在試婚紗的時候發(fā)現(xiàn)自己被綠了振劳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡油狂,死狀恐怖历恐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情专筷,我是刑警寧澤弱贼,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站磷蛹,受9級特大地震影響吮旅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜味咳,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一庇勃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧槽驶,春花似錦责嚷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揍异。三九已至,卻和暖如春聂受,著一層夾襖步出監(jiān)牢的瞬間蒿秦,已是汗流浹背烤镐。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工蛋济, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人炮叶。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓碗旅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親镜悉。 傳聞我的和親對象是個殘疾皇子祟辟,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容

  • CALayer - 在iOS中,你能看得見摸得著的東西基本上都是UIView侣肄,比如一個按鈕旧困、一個文本標簽、一個文本...
    Hevin_Chen閱讀 1,140評論 0 10
  • 一稼锅、簡介 Core Animation吼具,中文翻譯為核心動畫,它是一組非常強大的動畫處理API矩距,使用它能做出非常炫麗...
    莦婼姑娘閱讀 964評論 0 4
  • 文 || 張賀 Core Animation簡介 Core Animation拗盒,中文翻譯為核心動畫,它是一組非常強...
    張賀閱讀 2,040評論 9 35
  • 核心動畫(Core Animation)一锥债、Core animation簡單介紹 1.Core Animatio...
    北辰青閱讀 1,036評論 0 1
  • 王守仁的“致良知” 王守仁陡蝇,浙江人,通常稱他為“陽明先生”哮肚。杰出的哲學家登夫、政治家。他早年信奉程朱允趟。朱熹教導窮理需格...
    AndyAngel閱讀 155評論 0 0