CoreAnimation
核心動(dòng)畫(huà)是一組強(qiáng)大的動(dòng)畫(huà)處理API,使用它能做出很多炫麗的動(dòng)畫(huà)效果。動(dòng)畫(huà)的執(zhí)行過(guò)程都是在獨(dú)立的線程中進(jìn)行的,不會(huì)阻塞主線程。
注意:CoreAnimation是直接作用在CALayer上的,并非UIView!
CALayer
1.CALayer是核心動(dòng)畫(huà)的基礎(chǔ),它是所有圖層類的基類(后面會(huì)一一介紹其他圖層類),通過(guò)對(duì)圖層的操作,可以實(shí)現(xiàn)很多在UIView上實(shí)現(xiàn)不了的動(dòng)畫(huà)!
2.每個(gè)UIView及其子類都有一個(gè)root layer用來(lái)顯示UIView上的內(nèi)容,簡(jiǎn)單點(diǎn)來(lái)說(shuō),UIView自身并沒(méi)有顯示的功能,它之所以能夠顯示在屏幕上,是因?yàn)樗鼉?nèi)部的圖層。一個(gè)UIView至少有一個(gè)layer。
3.非root layer的部分屬性修改時(shí),會(huì)自帶一些動(dòng)畫(huà)效果,簡(jiǎn)稱隱式動(dòng)畫(huà)(屬性后帶Animatable),常見(jiàn)的有bounds、backgroundColor、position等
CALayer常用屬性
| 屬性 |
描述 |
| anchorPoint |
錨點(diǎn),x和y方向的取值范圍均為(0,1),(0,0)表示左上角,(1,1)表示右下角,(0.5,0.5)表示中心點(diǎn),默認(rèn)錨點(diǎn)為layer的中心點(diǎn) |
| bounds |
layer的大小,若為UIView的根layer,默認(rèn)為UIView的bounds;若為新創(chuàng)建layer,默認(rèn)為CGRectZero |
| position |
錨點(diǎn)所在位置的坐標(biāo),此坐標(biāo)是相對(duì)于父視圖的!若為UIView根layer,默認(rèn)為UIView的center;若為新創(chuàng)建layer,默認(rèn)為zero |
| transform |
形變參數(shù),類似與UIView的transform(CGAffineTransform),不過(guò)layer的transform(CATransform3D)是一個(gè)四維矩陣,可以進(jìn)行三維的變化操作 |
| mask |
mask圖層,根據(jù)透明度進(jìn)行裁剪,只保留非透明部分,顯示底部?jī)?nèi)容 |
| masksToBounds |
是否將layer之外的部分遮擋,若為true對(duì)陰影效果有影響,默認(rèn)為false |
| backgroundColor |
由于QuartzCore框架和CoreGrahpics框架均是跨平臺(tái)的,但UIKit只能在iOS中使用,為保證可擴(kuò)展性,需使用CGColor,而不能使用UIColor |
| cornerRadius |
圓角 |
| borderWidth |
描邊寬度 |
| borderColor |
描邊顏色 |
| opacity |
layer透明度,默認(rèn)為1 |
| shadowColor |
陰影顏色 |
| shadowOpacity |
陰影透明度 |
| shadowOffset |
陰影偏移量 |
| shadowRadius |
陰影圓角 |
CAAnimation
結(jié)構(gòu)圖
CAAnimation是所有動(dòng)畫(huà)類的基礎(chǔ)類,它是一個(gè)抽象類,本身并不能做動(dòng)畫(huà),創(chuàng)建動(dòng)畫(huà)主要是使用它的子類
- CAPropertyAnimation:繼承于CAAnimation,它也是抽象類 創(chuàng)建動(dòng)畫(huà)主要是使用它的兩個(gè)子類
- CABasicAnimation:基本動(dòng)畫(huà) 繼承于CAPropertyAnimation 只做一些修改值的動(dòng)畫(huà)并且對(duì)動(dòng)畫(huà)做一些控制
主要屬性:
fromValue:相應(yīng)屬性的初始值
byValue:過(guò)渡值
toValue:相應(yīng)屬性的結(jié)束值
- CAKeyFrameAnimation:關(guān)鍵幀動(dòng)畫(huà) 繼承于CAPropertyAnimation 可以設(shè)置一個(gè)一系列路徑的數(shù)組 讓動(dòng)畫(huà)在路徑上執(zhí)行
主要屬性:
values:動(dòng)畫(huà)會(huì)在指定的某個(gè)時(shí)間間隔內(nèi)到達(dá)數(shù)組中的某個(gè)值
keyTimes:數(shù)組 對(duì)應(yīng)values中的某個(gè)值的那幀動(dòng)畫(huà)的執(zhí)行時(shí)間
path:可以設(shè)置一個(gè)CGPathRef、CGMutablePathRef,讓圖層按照路徑軌跡移動(dòng)。path只對(duì)CALayer的anchorPoint和position起作用。如果設(shè)置了path,那么values將被忽略
- CAAnimationGroup:動(dòng)畫(huà)組 繼承于CAAnimation 可以保存一組動(dòng)畫(huà)對(duì)象 將CAAnimationGroup對(duì)象加入圖層后,組中所有動(dòng)畫(huà)對(duì)象可以同時(shí)執(zhí)行
主要屬性:
animations:數(shù)組 將幾個(gè)動(dòng)畫(huà)對(duì)象放入其中
默認(rèn)情況下,數(shù)組中的所有動(dòng)畫(huà)是同時(shí)執(zhí)行的,也可以設(shè)置動(dòng)畫(huà)對(duì)象的beginTime來(lái)更改動(dòng)畫(huà)的開(kāi)始時(shí)間
- CATransition:轉(zhuǎn)場(chǎng)動(dòng)畫(huà) 繼承于CAAnimation 提供層移出屏幕和移入屏幕的動(dòng)畫(huà)效果 系統(tǒng)導(dǎo)航壓棧的動(dòng)畫(huà)就是轉(zhuǎn)場(chǎng)動(dòng)畫(huà)效果
主要屬性:
type:動(dòng)畫(huà)過(guò)渡類型
subtype:動(dòng)畫(huà)過(guò)渡方向
startProgress:動(dòng)畫(huà)起點(diǎn) 百分比
endProgress:動(dòng)畫(huà)終點(diǎn) 百分比
CAAnimation屬性
| 屬性 |
描述 |
| timingFunction |
速度控制函數(shù),控制動(dòng)畫(huà)運(yùn)行的節(jié)奏 |
| delegate |
動(dòng)畫(huà)代理 |
| 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 |
- kCAMediaTimingFunctionLinear:線性動(dòng)畫(huà)
- kCAMediaTimingFunctionEaseIn:動(dòng)畫(huà)緩慢開(kāi)始,然后逐漸加速
- kCAMediaTimingFunctionEaseOut:動(dòng)畫(huà)迅速開(kāi)始,在結(jié)束時(shí)減速
- kCAMediaTimingFunctionEaseInEaseOut:動(dòng)畫(huà)慢慢開(kāi)始,然后加速,在結(jié)束之前減速
- kCAMediaTimingFunctionDefault :系統(tǒng)默認(rèn)動(dòng)畫(huà)效果
- public func animationDidStart(anim: CAAnimation):動(dòng)畫(huà)開(kāi)始時(shí)調(diào)用
- public func animationDidStop(anim: CAAnimation, finished flag: Bool):動(dòng)畫(huà)結(jié)束后調(diào)用
遵循協(xié)議-CAMediaTiming
| 屬性 |
描述 |
| beginTime |
動(dòng)畫(huà)的開(kāi)始時(shí), 默認(rèn)為0 |
| duration |
動(dòng)畫(huà)持續(xù)時(shí)間,默認(rèn)為0 |
| speed |
動(dòng)畫(huà)執(zhí)行速度 |
| timeOffset |
時(shí)間偏移量,默認(rèn)為0 |
| repeatCount |
重復(fù)次數(shù),默認(rèn)為0 |
| repeatDuration |
重復(fù)間隔,默認(rèn)為0 |
| autoreverses |
動(dòng)畫(huà)自動(dòng)逆向執(zhí)行,默認(rèn)為No |
| fillMode |
決定當(dāng)前對(duì)象在應(yīng)用程序非active時(shí)間段(動(dòng)畫(huà)開(kāi)始之前或者動(dòng)畫(huà)結(jié)束之后)的行為。fillMode取值fillMode屬性值(要想fillMode有效,最好設(shè)置removedOnCompletion = NO) |
- kCAFillModeForwards:當(dāng)動(dòng)畫(huà)結(jié)束后,layer會(huì)一直保持著動(dòng)畫(huà)最后的狀態(tài)
- kCAFillModeBackwards:在動(dòng)畫(huà)開(kāi)始前,只需要將動(dòng)畫(huà)加入了一個(gè)layer,layer便立即進(jìn)入動(dòng)畫(huà)的初始狀態(tài)并等待動(dòng)畫(huà)開(kā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)值,也就是說(shuō)當(dāng)動(dòng)畫(huà)開(kāi)始前和動(dòng)畫(huà)結(jié)束后,動(dòng)畫(huà)對(duì)layer都沒(méi)有影響,動(dòng)畫(huà)結(jié)束后,layer會(huì)恢復(fù)到之前的狀態(tài)
附keyPath表
| keyPath |
描述 |
| transform.rotation.x |
繞著x軸旋轉(zhuǎn) |
| transform.rotation.y |
繞著y軸旋轉(zhuǎn) |
| transform.rotation.z |
繞著z軸旋轉(zhuǎn) |
| transform.rotation |
默認(rèn)繞著z軸旋轉(zhuǎn) |
| transform.scale.x |
x軸方向縮放 |
| transform.scale.y |
y軸方向縮放 |
| transform.scale.z |
z軸方向縮放 |
| transform.scale |
默認(rèn)x,y,z三個(gè)方向均等比縮放 |
| transform.translation.x |
沿x軸方向平移 |
| transform.translation.y |
沿y軸方向平移 |
| transform.translation.z |
沿z軸方向平移 |
| transform.translation |
默認(rèn)沿x軸和y軸同時(shí)移動(dòng),設(shè)置值時(shí)應(yīng)為NSSize或者CGSize |
結(jié)語(yǔ)
本篇總結(jié)了核心動(dòng)畫(huà)常用基礎(chǔ)知識(shí),如有不對(duì)的地方,麻煩請(qǐng)指出!接下來(lái)就會(huì)逐一的探究CAAnimation的各子類的用法,謝謝閱讀!
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。