動(dòng)畫(huà)是iOS中非常有趣的部分尾序,同時(shí)也是提升用戶交互體驗(yàn)的有力工具悯许,本文主要分為兩個(gè)部分亥啦,第一個(gè)部分講解基礎(chǔ)知識(shí)炭剪,第二個(gè)部分列舉基本使用
一、基礎(chǔ)知識(shí)
1.1翔脱、動(dòng)畫(huà)相關(guān)框架
從上圖可以發(fā)現(xiàn)
- UIView在最上層
- 往下依次是CoreAnimation
- CoreGraphics奴拦、Hardware
1.2、iOS系統(tǒng)框架
上圖為iOS中的四層架構(gòu)
- UIView位于Cocoa Touch層
- CoreAnimation位于Media Layer中的QuartzCore框架中届吁,查看QuartzCore的頭文件可以發(fā)現(xiàn)错妖,只引入了CoreAnimation。CALayer這個(gè)熟悉的對(duì)象是在CoreAnimation中疚沐,CoreAnimation往往作用于CALayer而不是UIView
- Core Graphics也是在Media Layer層中的框架
1.3暂氯、UIView、QuartzCore和CoreGraphics之間的關(guān)系
- UIView:主要負(fù)責(zé)事件響應(yīng)亮蛔、頁(yè)面展示和與RunLoop相關(guān)操作
- QuartzCore:不單負(fù)責(zé)動(dòng)畫(huà)的創(chuàng)建和執(zhí)行痴施,還會(huì)將圖形圖像最終顯示到屏幕上(本質(zhì)上是CoreAnimation通過(guò)OpenGLES來(lái)做的)
- CoreGraphics:是一個(gè)基于C的庫(kù)函數(shù)的高級(jí)繪畫(huà)引擎,負(fù)責(zé)創(chuàng)建最終顯示到屏幕上的數(shù)據(jù)模型
1.4、UIView和CALayer的協(xié)同
- UIView都擁有一個(gè)CALayer辣吃,CALayer將UIView設(shè)置為了自己的代理對(duì)象
- 對(duì)于CALayer對(duì)象动遭,改變其屬性,都會(huì)觸發(fā)一個(gè)簡(jiǎn)單動(dòng)畫(huà)
- UIView禁止在默認(rèn)情況下禁止了CALayer的動(dòng)畫(huà)神得,所以我們?cè)诟淖僓IView的屬性的時(shí)候厘惦,不會(huì)觸發(fā)動(dòng)畫(huà),而在UIView的動(dòng)畫(huà)block中循头,我們又能產(chǎn)生動(dòng)畫(huà)绵估,在原理上為:一個(gè)可動(dòng)畫(huà)的CALayer屬性改變的時(shí)候,都會(huì)尋找并運(yùn)行一個(gè)合適的改變卡骂,這個(gè)改變是CAAction對(duì)象国裳,而UIView的CALayer對(duì)象會(huì)詢問(wèn)他的delegate,即UIView全跨,詢問(wèn)提供一個(gè)CAAction對(duì)象缝左,delegate可以通過(guò)下面三種方式之一進(jìn)行響應(yīng)
1、它可以返回一個(gè)動(dòng)作對(duì)象浓若,這種情況下 layer 將使用這個(gè)動(dòng)作渺杉。
2、它可以返回一個(gè) nil挪钓, 這樣 layer 就會(huì)到其他地方繼續(xù)尋找是越。
3、它可以返回一個(gè) NSNull 對(duì)象碌上,告訴 layer 這里不需要執(zhí)行一個(gè)動(dòng)作倚评,搜索也會(huì)就此停止。
1.5馏予、UIView和CALayer的關(guān)系
- UIView的屬性只是簡(jiǎn)單地返回了CALayer對(duì)象的屬性
- UIView作為CALayer的代理天梧,負(fù)責(zé)事件處理功能,CALayer負(fù)責(zé)頁(yè)面繪制(前面也提到了CoreAnimation的作用)
二霞丧、基本使用
2.1呢岗、Core Animation類圖
2.2、類別
我們常用到的為下面四種:
- CAAnimationGroup:動(dòng)畫(huà)組蛹尝,將不同類型的動(dòng)畫(huà)同時(shí)進(jìn)行或者連續(xù)進(jìn)行
- CABasicAnimation:基本動(dòng)畫(huà)后豫,包括一些基本屬性的動(dòng)畫(huà),例如位移突那、縮放硬贯、漸變等
- CAKeyFrameAnimation:關(guān)鍵幀動(dòng)畫(huà),連續(xù)進(jìn)行多個(gè)階段的動(dòng)畫(huà)
- CATransition:過(guò)渡動(dòng)畫(huà)
除了上面四種陨收,還有一種是iOS9之后提供的彈簧動(dòng)畫(huà)CASpringAnimation
另外,CoreGraphics中提供了仿射變化動(dòng)畫(huà),可以很方便地進(jìn)行一些基本動(dòng)畫(huà)操作