了解CoreAnimation
-
CoreAnimation是蘋(píng)果提供的一套基于繪圖的動(dòng)畫(huà)框架席赂。
image
上圖是蘋(píng)果給出的體系結(jié)構(gòu),最低層是硬件層(GPU),上層是OpenGL和CoreGraphics,再上層CoreAnimation,最上層就是UIKit.
所以CoreAnimation是基于OpenGL和CoreGraphics封裝的,并不是直接接觸硬件層.
- CoreAnimation不是一個(gè)獨(dú)立框架矛渴,而是封裝在
QuartzCore
框架中. - CoreAnimation是作用于
layer
,不是View
,這點(diǎn)要注意.
CABasicAnimation使用
CoreAnimation包含了許多的高級(jí)動(dòng)畫(huà)效果,CABasicAnimation只是其中一小部分,也是最基礎(chǔ)動(dòng)畫(huà).
CABasicAnimation的常用屬性詳解
- timingFunction
可選
控制動(dòng)畫(huà)的運(yùn)行節(jié)奏椎扬;有以下5種類(lèi)型
類(lèi)型 | 描述 |
---|---|
kCAMediaTimingFunctionLinear | 均速(線性運(yùn)行) |
kCAMediaTimingFunctionEaseIn | 先緩慢進(jìn)入,再加速離開(kāi) |
kCAMediaTimingFunctionEaseOut | 全速開(kāi)始具温,慢慢減速 |
kCAMediaTimingFunctionEaseInEaseOut | 先慢慢加速蚕涤,再慢慢減速。 |
kCAMediaTimingFunctionDefault | 默認(rèn)值.先慢慢加速铣猩,再慢慢減速揖铜,但是它加速減速速度略慢 |
fromValue
必選
動(dòng)畫(huà)初始值(狀態(tài)).類(lèi)型:NSValue
NSNumber
toValue
必選
動(dòng)畫(huà)結(jié)束值(狀態(tài)).類(lèi)型:NSValue
NSNumber
duration
必選
每次動(dòng)畫(huà)時(shí)間autoreverses
可選
默認(rèn)為NO
,當(dāng)設(shè)置為YES時(shí),表示啟用回退動(dòng)畫(huà),即由toValue到fromValue做回退動(dòng)畫(huà)removedOnCompletion
可選
默認(rèn)為YES
,動(dòng)畫(huà)結(jié)束后從layer移除,當(dāng)設(shè)置為NO時(shí),不移除fillMode
可選
控制動(dòng)畫(huà)開(kāi)始之前或者動(dòng)畫(huà)結(jié)束之后layer
的行為.有以下4種類(lèi)型
類(lèi)型 | 描述 |
---|---|
kCAFillModeForwards | 在動(dòng)畫(huà)開(kāi)始前,只需要將動(dòng)畫(huà)加入了一個(gè)layer达皿,layer便立即進(jìn)入動(dòng)畫(huà)的初始狀態(tài)并等待動(dòng)畫(huà)開(kāi)始 |
kCAFillModeBackwards | 當(dāng)動(dòng)畫(huà)結(jié)束后蛮位,layer會(huì)一直保持著動(dòng)畫(huà)最后的狀態(tài) |
kCAFillModeBoth | 動(dòng)畫(huà)加入之后在開(kāi)始之前,layer便處于動(dòng)畫(huà)初始狀態(tài)鳞绕,動(dòng)畫(huà)結(jié)束后layer保持動(dòng)畫(huà)最后的狀態(tài) |
kCAFillModeRemoved | 默認(rèn)值.動(dòng)畫(huà)結(jié)束后,不改變layer的狀態(tài),layer會(huì)恢復(fù)到之前的狀態(tài) |
repeatCount
可選
動(dòng)畫(huà)重復(fù)次數(shù).默認(rèn)為0,不可與repeatDuration
同時(shí)使用.(非重復(fù)動(dòng)畫(huà)不用關(guān)注此參數(shù))repeatDuration
可選
動(dòng)畫(huà)重復(fù)時(shí)間.不可與repeatCount
同時(shí)使用,(系統(tǒng)會(huì)根據(jù) repeatDuration/duration 計(jì)算出要做多少次動(dòng)畫(huà)).(非重復(fù)動(dòng)畫(huà)不用關(guān)注此參數(shù))
動(dòng)畫(huà)實(shí)現(xiàn)
- (void)myAnimation {
NSString *keyPath = @"position";
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:keyPath];
// 速度控制函數(shù)失仁,控制動(dòng)畫(huà)運(yùn)行的節(jié)奏
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
// YES=啟用回退動(dòng)畫(huà),即由toValue到fromValue做回退動(dòng)畫(huà)
animation.autoreverses = YES;
// YES=動(dòng)畫(huà)結(jié)束時(shí)從layer移除
animation.removedOnCompletion = YES;
// 控制動(dòng)畫(huà)開(kāi)始之前或者動(dòng)畫(huà)結(jié)束之后`layer`的行為
animation.fillMode = kCAFillModeForwards;
// 動(dòng)畫(huà)初始值(狀態(tài)),必須設(shè)置
animation.fromValue = [NSValue valueWithCGPoint:self.interactView.center];
// 動(dòng)畫(huà)結(jié)束值(狀態(tài))们何,必須設(shè)置
animation.toValue = [NSValue valueWithCGPoint:self.targetView.center];
// 重復(fù)次數(shù)
animation.repeatCount = INT_MAX;
// 每次動(dòng)畫(huà)時(shí)間萄焦,必須設(shè)置
animation.duration = 1.8;
// 添加到layer,并開(kāi)始動(dòng)冤竹;必須設(shè)置
[arrowView.layer addAnimation:animation forKey:keyPath];
}
上面代碼的動(dòng)畫(huà)效果
KeyPath
列表
Apple官方鏈接:CALayer Animatable Properties
注意: CoreAnimation是作用于layer,layer并沒(méi)有
frame
屬性,所以對(duì)frame
是無(wú)效的,可通過(guò)position
和bounds
間接實(shí)現(xiàn)