一、簡(jiǎn)單介紹
項(xiàng)目中常用的動(dòng)畫(huà)效果基本使用CABasicAnimation就能完成,它CAPropertyAnimation的子類(lèi)
屬性解析:
fromValue:keyPath相應(yīng)屬性的初始值
toValue:keyPath相應(yīng)屬性的結(jié)束值
核心動(dòng)畫(huà)是一種假象動(dòng)畫(huà)
隨著動(dòng)畫(huà)的進(jìn)行,在長(zhǎng)度為duration的持續(xù)時(shí)間內(nèi),keyPath相應(yīng)屬性的值從fromValue漸漸地變?yōu)閠oValue
如果fillMode=kCAFillModeForwards和removedOnComletion=NO,那么在動(dòng)畫(huà)執(zhí)行完畢后,圖層會(huì)保持顯示動(dòng)畫(huà)執(zhí)行后的狀態(tài)。但在實(shí)質(zhì)上,圖層的屬性值還是動(dòng)畫(huà)執(zhí)行前的初始值,并沒(méi)有真正被改變。
比如,CALayer的position初始值為(0,0),CABasicAnimation的fromValue為(10,10),toValue為(100,100),雖然動(dòng)畫(huà)執(zhí)行完畢后圖層保持在(100,100)這個(gè)位置,實(shí)質(zhì)上圖層的position還是為(0,0)
- Core Animation的使用步驟*
1.使用它需要先添加QuartzCore.framework框架和引入主頭文件<QuartzCore/QuartzCore.h>(iOS7不需要)
2.初始化一個(gè)CAAnimation對(duì)象,并設(shè)置一些動(dòng)畫(huà)相關(guān)屬性
3.通過(guò)調(diào)用CALayer的addAnimation:forKey:方法增加CAAnimation對(duì)象到CALayer中,這樣就能開(kāi)始執(zhí)行動(dòng)畫(huà)了
4.通過(guò)調(diào)用CALayer的removeAnimationForKey:方法可以停止CALayer中的動(dòng)畫(huà)
二、實(shí)例
-
創(chuàng)建動(dòng)畫(huà)對(duì)象
CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"]; rotationAnimation.toValue = @(2 * M_PI); rotationAnimation.repeatCount = MAXFLOAT; rotationAnimation.duration = 5; rotationAnimation.removedOnCompletion = NO; 通過(guò)animationWithKeyPath設(shè)置不同動(dòng)畫(huà)效果
常用KepPath動(dòng)畫(huà)效果
transform.scale = 比例縮放
transform.scale.x = 寬的比例縮放
transform.scale.y = 高的比例縮放
transform.rotation = 平面的旋轉(zhuǎn)
transform.rotation.y =Y方向旋轉(zhuǎn)
transform.rotation.x = X方向旋轉(zhuǎn)
opacity = 透明度變化把動(dòng)畫(huà)對(duì)象添加到你想運(yùn)用動(dòng)畫(huà)的空間圖層上
[self.iconView.layer addAnimation:rotationAnimation forKey:nil];
三、小結(jié)
所有動(dòng)畫(huà)對(duì)象的父類(lèi),負(fù)責(zé)控制動(dòng)畫(huà)的持續(xù)時(shí)間和速度,是個(gè)抽象類(lèi),不能直接使用,應(yīng)該使用它具體的子類(lèi)
屬性解析:(紅色代表來(lái)自CAMediaTiming協(xié)議的屬性)
duration:動(dòng)畫(huà)的持續(xù)時(shí)間
repeatCount:動(dòng)畫(huà)的重復(fù)次數(shù)
repeatDuration:動(dòng)畫(huà)的重復(fù)時(shí)間
removedOnCompletion:默認(rèn)為YES,代表動(dòng)畫(huà)執(zhí)行完畢后就從圖層上移除,圖形會(huì)恢復(fù)到動(dòng)畫(huà)執(zhí)行前的狀態(tài)。如果想讓圖層保持顯示動(dòng)畫(huà)執(zhí)行后的狀態(tài),那就設(shè)置為NO,不過(guò)還要設(shè)置fillMode為kCAFillModeForwards
fillMode:決定當(dāng)前對(duì)象在非active時(shí)間段的行為.比如動(dòng)畫(huà)開(kāi)始之前,動(dòng)畫(huà)結(jié)束之后
beginTime:可以用來(lái)設(shè)置動(dòng)畫(huà)延遲執(zhí)行時(shí)間,若想延遲2s,就設(shè)置為CACurrentMediaTime()+2,CACurrentMediaTime()為圖層的當(dāng)前時(shí)間
timingFunction:速度控制函數(shù),控制動(dòng)畫(huà)運(yùn)行的節(jié)奏
delegate:動(dòng)畫(huà)代理