iOS總結-有關動畫基礎之CoreGraphics、Quartz2D、QuartzCore、CoreAnimation的總結
參考:https://blog.csdn.net/make___/article/details/45576857
https://www.jianshu.com/p/397690fd4555
一直對於CoreGraphics, QuartzCore, CoreAnimation區分不清楚。
CoreGraphics,核心圖形。它是ios的核心圖形庫,平時使用最頻繁的point,size,rect等這些圖形,都定義在這個框架中,類名以CG開頭的都屬於CoreGraphics框架,它提供的都是C語言的函式介面,是可以在ios和mac os通用的
CoreGraphics的類名是以CG開頭的,CGRect,CGPoint都是在CGGeometry這個幾何相關的類中定義的。CGFont封裝成UIFont,CGImage構成了UIImage,CGContext是繪圖的上下文。CoreGraphics是系統繪製介面、文字、圖形等UI的基礎。
Quartz2D是一個基於CoreGraphics API的繪圖框架,它在iOS/MAC OS 負責繪製圖形:
貝塞爾曲線,線條、三角形、矩形、圓、圓弧等
繪製文字 繪製/生成圖片(影象)讀取/生成PDF 截圖/剪下圖片 自定義UI控制元件
API是C語言寫成的, 所以ARC並不起作用,仍然需要手動管理記憶體。
QuartzCore和CoreAnimation
Quartz是引用了CoreAnimation標頭檔案,看著實際是同一個,是一個基於CoreGraphics的OC語言封裝,封裝出了基本渲染類CALayer,兩者都是跨ios和mac os使用的,這點區別UIKit,並且CoreAnimation中大量用到CoreGraphics中的類,實現動畫自然要用到圖形庫中的東西。
CoreAnimation核心動畫,負責動畫的。
CoreAnimation執行動畫是在後臺,不會阻塞主執行緒。
CoreAnimation作用在CALayer, 不是View
CoreGraphics和CoreAnimation關係: 都是跨iOS和Mac OS使用的,這點區別於UIKit.
以CA開頭都是它的類,帶layer的類是構成UIView的基礎。
layer層只負責呈現檢視,不能響應使用者事件。
CAShapeLayer
用阿里根據CGPath來渲染圖層,CGPath就是CoreGraphics中的一部分
CATextLayer
用來呈現文字,包含UILabel的功能
CAGradientLayer
用來生成兩種或更多顏色平滑漸變的
CAReplicaorLayer
為了高效生成許多相似的圖層。它會繪製一個或多個圖層的子圖層,並在每個複製體上應用不同的變換
CAScrollLayer
像UIScrollView
CATiledLayer
CAEAGLLayer 進行OpenGL繪圖工作
CAAnimation類繼承與NSObject,是一個抽象類,並不直接負責動畫,有一個子類CAPropetyAnimation, 也是抽象類。CAPropertyAnimation的兩個子類才直接對layer層進行動畫操作,其中CABasicAnimation負責基礎動畫,CAKeyFrameAnimation負責關鍵幀動畫。
帶有Emitter的類是負責粒子動畫的類,可以用來做炫酷的粒子動畫。
CAMediaTimiing是一個協議,精確控制時間,animation和layer實現這個協議。