iOS核心動畫

動畫是iOS中非常有趣的部分,同時也是提升用戶交互體驗的有力工具,本文主要分為兩個部分,第一個部分講解基礎(chǔ)知識,第二個部分列舉基本使用

一、基礎(chǔ)知識

1.1、動畫相關(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這個熟悉的對象是在CoreAnimation中,CoreAnimation往往作用于CALayer而不是UIView
  • Core Graphics也是在Media Layer層中的框架
1.3、UIView、QuartzCore和CoreGraphics之間的關(guān)系
  • UIView:主要負(fù)責(zé)事件響應(yīng)、頁面展示和與RunLoop相關(guān)操作
  • QuartzCore:不單負(fù)責(zé)動畫的創(chuàng)建和執(zhí)行,還會將圖形圖像最終顯示到屏幕上(本質(zhì)上是CoreAnimation通過OpenGLES來做的)
  • CoreGraphics:是一個基于C的庫函數(shù)的高級繪畫引擎,負(fù)責(zé)創(chuàng)建最終顯示到屏幕上的數(shù)據(jù)模型
1.4、UIView和CALayer的協(xié)同
  • UIView都擁有一個CALayer,CALayer將UIView設(shè)置為了自己的代理對象
  • 對于CALayer對象,改變其屬性,都會觸發(fā)一個簡單動畫
  • UIView禁止在默認(rèn)情況下禁止了CALayer的動畫,所以我們在改變UIView的屬性的時候,不會觸發(fā)動畫,而在UIView的動畫block中,我們又能產(chǎn)生動畫,在原理上為:一個可動畫的CALayer屬性改變的時候,都會尋找并運行一個合適的改變,這個改變是CAAction對象,而UIView的CALayer對象會詢問他的delegate,即UIView,詢問提供一個CAAction對象,delegate可以通過下面三種方式之一進行響應(yīng)
1、它可以返回一個動作對象,這種情況下 layer 將使用這個動作。
2、它可以返回一個 nil, 這樣 layer 就會到其他地方繼續(xù)尋找。
3、它可以返回一個 NSNull 對象,告訴 layer 這里不需要執(zhí)行一個動作,搜索也會就此停止。
1.5、UIView和CALayer的關(guān)系
  • UIView的屬性只是簡單地返回了CALayer對象的屬性
  • UIView作為CALayer的代理,負(fù)責(zé)事件處理功能,CALayer負(fù)責(zé)頁面繪制(前面也提到了CoreAnimation的作用)

二、基本使用

2.1、Core Animation類圖
2.2、類別

我們常用到的為下面四種:

  • CAAnimationGroup:動畫組,將不同類型的動畫同時進行或者連續(xù)進行
  • CABasicAnimation:基本動畫,包括一些基本屬性的動畫,例如位移、縮放、漸變等
  • CAKeyFrameAnimation:關(guān)鍵幀動畫,連續(xù)進行多個階段的動畫
  • CATransition:過渡動畫

除了上面四種,還有一種是iOS9之后提供的彈簧動畫CASpringAnimation
另外,CoreGraphics中提供了仿射變化動畫,可以很方便地進行一些基本動畫操作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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