傻傻分不清:Quartz2D、QuartzCore、CoreAnimation徒恋、CoreImage蚕断、CoreGraphics

在iOS開發(fā)中,你可能都用到過這些知識點(diǎn)入挣,但是并沒有仔細(xì)區(qū)分過亿乳,正所謂,百姓日用而不知径筏,現(xiàn)在就來細(xì)說一下他們之間的區(qū)別和聯(lián)系葛假。

1. CoreGraphics

這是一個C語言寫就的庫,來看看他的頭文件:

#ifndef COREGRAPHICS_H_
#define COREGRAPHICS_H_

#include <CoreGraphics/CGBase.h>

#include <CoreGraphics/CGAffineTransform.h>
#include <CoreGraphics/CGBitmapContext.h>
#include <CoreGraphics/CGColor.h>
#include <CoreGraphics/CGColorConversionInfo.h>
#include <CoreGraphics/CGColorSpace.h>
#include <CoreGraphics/CGContext.h>
#include <CoreGraphics/CGDataConsumer.h>
#include <CoreGraphics/CGDataProvider.h>
#include <CoreGraphics/CGError.h>
#include <CoreGraphics/CGFont.h>
#include <CoreGraphics/CGFunction.h>
#include <CoreGraphics/CGGeometry.h>
#include <CoreGraphics/CGGradient.h>
#include <CoreGraphics/CGImage.h>
#include <CoreGraphics/CGLayer.h>
#include <CoreGraphics/CGPDFArray.h>
#include <CoreGraphics/CGPDFContentStream.h>
#include <CoreGraphics/CGPDFContext.h>
#include <CoreGraphics/CGPDFDictionary.h>
#include <CoreGraphics/CGPDFDocument.h>
#include <CoreGraphics/CGPDFObject.h>
#include <CoreGraphics/CGPDFOperatorTable.h>
#include <CoreGraphics/CGPDFPage.h>
#include <CoreGraphics/CGPDFScanner.h>
#include <CoreGraphics/CGPDFStream.h>
#include <CoreGraphics/CGPDFString.h>
#include <CoreGraphics/CGPath.h>
#include <CoreGraphics/CGPattern.h>
#include <CoreGraphics/CGShading.h>


#endif  /* COREGRAPHICS_H_ */

通過頭文件可以看到滋恬,CoreGraphics的類名都是以CG開頭的聊训,平時所用的CGRect、CGPoint就在CGGeometry這個幾何相關(guān)的類中定義恢氯,CGFont類則被封裝成了UIFont魔眨,CGImage構(gòu)成了UIImage,CGContext是繪圖的上下文等等酿雪。所以CoreGraphics是系統(tǒng)繪制界面、文字侄刽、圖像等UI的基礎(chǔ)指黎。

2. Quartz2D

這是一個基于CoreGraphics API的繪圖框架,系統(tǒng)中并沒有Quartz2D.framework這么一個庫州丹,他只是包含了CoreGraphics中的部分API醋安,是一個抽象的引擎,并不是一個實(shí)體墓毒,他在iOS和MAC系統(tǒng)中負(fù)責(zé):

  • 繪制圖形 : 線條\三角形\矩形\圓\弧等
  • 繪制文字
  • 繪制\生成圖片(圖像)
  • 讀取\生成PDF
  • 截圖\裁剪圖片
  • 自定義UI控件

PS:因?yàn)槭茿PI是C語言寫成的吓揪,所以ARC并不起作用,仍然需要手動管理內(nèi)存所计。

3.QuartzCore和CoreAnimation

打開QuartzCore的頭文件可以看到

#ifndef QUARTZCORE_H
#define QUARTZCORE_H

#include <QuartzCore/CoreAnimation.h>

#endif /* QUARTZCORE_H */

QuartzCore就是引用了CoreAnimation的頭文件,所以這兩個實(shí)際上是同一個主胧,是雌雄同體。踪栋。焙格。夷都。
CoreAnimation中文名核心動畫,看名字是負(fù)責(zé)動畫的,其實(shí)不然蛤虐,作用相當(dāng)大,來看看他的頭文件


#ifndef COREANIMATION_H
#define COREANIMATION_H

#include <QuartzCore/CABase.h>
#include <QuartzCore/CATransform3D.h>

#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <QuartzCore/CAAnimation.h>
#import <QuartzCore/CADisplayLink.h>
#import <QuartzCore/CAEAGLLayer.h>
#import <QuartzCore/CAEmitterBehavior.h>
#import <QuartzCore/CAEmitterCell.h>
#import <QuartzCore/CAEmitterLayer.h>
#import <QuartzCore/CAGradientLayer.h>
#import <QuartzCore/CALayer.h>
#import <QuartzCore/CAMediaTiming.h>
#import <QuartzCore/CAMediaTimingFunction.h>
#import <QuartzCore/CAReplicatorLayer.h>
#import <QuartzCore/CAScrollLayer.h>
#import <QuartzCore/CAShapeLayer.h>
#import <QuartzCore/CATextLayer.h>
#import <QuartzCore/CATiledLayer.h>
#import <QuartzCore/CATransaction.h>
#import <QuartzCore/CATransform3D.h>
#import <QuartzCore/CATransformLayer.h>
#import <QuartzCore/CAValueFunction.h>
#endif

#endif /* COREANIMATION_H */

以CA開頭的都是他的類笆焰,其中帶layer的類是構(gòu)成UIView的基石见坑,用來呈現(xiàn)內(nèi)容。其中:

  • CAShapeLayer
    用來根據(jù)CGPath來渲染的圖層荞驴,這里CGPath就是上文中提到的CoreGraphics的一部分不皆,比如常做的圓角霹娄,都是用cornerRadius來做,但是這是四個角都有的鲫骗,要想做一個角的就得用他了犬耻。
  • CATextLayer
    這個layer可以呈現(xiàn)文字,包含了UILabel的功能执泰,如果你閑的蛋疼枕磁,也可以用他來實(shí)現(xiàn)一個label。
  • CAGradientLayer
    是用來生成兩種或更多顏色平滑漸變的术吝。
  • CAReplicatorLayer
    是為了高效生成許多相似的圖層计济。它會繪制一個或多個圖層的子圖層,并在每個復(fù)制體上應(yīng)用不同的變換排苍。
  • CAScrollLayer
    有點(diǎn)像UIScrollView沦寂,可以用來呈現(xiàn)比他大的內(nèi)容。
  • CATiledLayer
    Tiled意思的瓷磚淘衙,就像鋪地板一樣传藏,可以把一個很大的圖片,切成一格一格的來呈現(xiàn)彤守。
  • CAEAGLLayer
    用來進(jìn)行OpenGL繪圖的工作漩氨,需要有OpenGL的基礎(chǔ)。

這其中可能存在疑問遗增,比如既然有了CATextLayer叫惊,為啥還要UILabel,有了CAScrollLayer還要有UIScrollView做修。答案是layer層只能呈現(xiàn)視圖霍狰,不能響應(yīng)用戶事件抡草,比如輸入,點(diǎn)擊蔗坯,拖拽等康震,所以才會有UIKit對layer的封裝,用來處理事件宾濒,然后用layer來呈現(xiàn)內(nèi)容腿短。

CAAnimation類繼承與NSObject,他是一個抽象類绘梦,并不直接負(fù)責(zé)動畫橘忱,他有一個子類CAPropertyAnimation,也是抽象類卸奉。CAPropertyAnimation的兩個子類才直接對layer層進(jìn)行動畫操作钝诚,其中CABasicAnimation負(fù)責(zé)基礎(chǔ)動畫,CAKeyframeAnimation負(fù)責(zé)關(guān)鍵幀動畫榄棵。

帶有Emitter的類是負(fù)責(zé)粒子動畫的類凝颇,可以用來做炫酷的粒子動畫。

帶有Trans的類負(fù)責(zé)仿射動畫疹鳄,所謂仿射拧略,就是模仿陽光照射,就有了立體的感覺瘪弓,可以做三維空間的變換辑鲤,不像CAAnimation,只能在平面上動手腳弛随。

CAMediaTiming是一個協(xié)議,里邊規(guī)定了幾個屬性栓票,用來精確控制時間愕够,animation和layer實(shí)現(xiàn)了這個協(xié)議惑芭。

4. CoreImage

照例,來看看頭文件

#ifdef __OBJC__

#import <CoreImage/CoreImageDefines.h>
#import <Foundation/Foundation.h>

#define UNIFIED_CORE_IMAGE 1

#import <CoreImage/CIVector.h>
#import <CoreImage/CIColor.h>
#import <CoreImage/CIImage.h>
#import <CoreImage/CIContext.h>
#import <CoreImage/CIFilter.h>
#import <CoreImage/CIKernel.h>
#import <CoreImage/CIDetector.h>
#import <CoreImage/CIFeature.h>
#import <CoreImage/CIImageProvider.h>
#import <CoreImage/CIImageProcessor.h>
#import <CoreImage/CIImageAccumulator.h>
#import <CoreImage/CIFilterConstructor.h>
#import <CoreImage/CIFilterShape.h>
#import <CoreImage/CISampler.h>
#import <CoreImage/CIRAWFilter.h>
#if !TARGET_OS_IPHONE
#import <CoreImage/CIFilterGenerator.h>
#import <CoreImage/CIPlugIn.h>
#endif

#endif /* __OBJC__ */

頭文件里可以看出來逃沿,這個庫主要針對圖片凯亮,跟上文里講到的不太相關(guān)。

早年間柠并,想要對圖片做濾鏡操作富拗,要用到一個叫GPUImage的第三方庫媒峡,如今,系統(tǒng)有了自己的庫半哟,可以對圖片進(jìn)行操作寓涨。其中CIFilter定義了各種濾鏡氯檐,比如把圖片變成黑白的,變成仿古的糯崎。還有以前流行的模糊圖片等等沃呢,在美顏相機(jī)上做的拆挥,就能用這個庫來做。

總結(jié)

寫了這么多惰瓜,可能又蒙了崎坊,這里總結(jié)一下

1. Quartz2D是CoreGraphics的一部分API的抽象洲拇,不是實(shí)際存在的.framework
2. CoreGraphics定義了顏色、位置打月、字體、路徑柴淘、圖片等UIKit的常見屬性为严。是構(gòu)成UIKit的基石肺稀。
3. QuartzCore和CoreAnimation是雌雄同體的同義詞。
4. CoreAnimation定義了動畫類來對layer做動畫夕吻,定義了layer來呈現(xiàn)內(nèi)容涉馅。定義了仿射變換來做3D動畫。
5. CoreImage定義了濾鏡稚矿,來對圖片進(jìn)行顏色過濾混合等操作捻浦。

PS:UIKit里的UIView,封裝了layer來呈現(xiàn)內(nèi)容昧识,內(nèi)容通過CoreGraphics來繪制到layer上母剥,其中位置环疼、大小炫隶、顏色,也都在CoreGraphics里定義了伪阶。并且加上了用戶事件,用來響應(yīng)用戶的輸入斟湃、點(diǎn)擊檐薯、拖拽等操作。

才疏學(xué)淺坛缕,歡迎指正??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赚楚,一起剝皮案震驚了整個濱河市宠页,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌勇皇,老刑警劉巖敛摘,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兄淫,死亡現(xiàn)場離奇詭異,居然都是意外死亡慨丐,警方通過查閱死者的電腦和手機(jī)泄私,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門捅暴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咧纠,“玉大人,你說我怎么就攤上這事梧奢。” “怎么了亲轨?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵希柿,是天一觀的道長养筒。 經(jīng)常有香客問我,道長挤悉,這世上最難降的妖魔是什么装悲? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任尚氛,我火速辦了婚禮,結(jié)果婚禮上属瓣,老公的妹妹穿的比我還像新娘讯柔。我一直安慰自己,他們只是感情好粗截,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布熊昌。 她就那樣靜靜地躺著湿酸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪选泻。 梳的紋絲不亂的頭發(fā)上美莫,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天厢呵,我揣著相機(jī)與錄音,去河邊找鬼碌奉。 笑死赐劣,一個胖子當(dāng)著我的面吹牛哩都,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咐汞,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼化撕,長吁一口氣:“原來是場噩夢啊……” “哼植阴!你這毒婦竟也來了墙贱?” 一聲冷哼從身側(cè)響起贱傀,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤府寒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后剖淀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纤房,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捌刮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绅作。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俄认。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡夜焦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出糊探,到底是詐尸還是另有隱情科平,我是刑警寧澤瞪慧,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布弃酌,位于F島的核電站妓湘,受9級特大地震影響乌询,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妹田,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一唬党、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鬼佣,春花似錦驶拱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阴孟。三九已至,卻和暖如春税迷,著一層夾襖步出監(jiān)牢的瞬間温眉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工翁狐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凌蔬。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓砂心,卻偏偏與公主長得像坎弯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子崎脉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

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

  • Core Animation其實(shí)是一個令人誤解的命名。你可能認(rèn)為它只是用來做動畫的蝎抽,但實(shí)際上它是從一個叫做Laye...
    小貓仔閱讀 3,694評論 1 4
  • 一狭吼、CAShapelayer 我們知道可以不使用圖片情況下利用CGpath去構(gòu)建任意形狀的陰影。其實(shí)我們也可...
    小貓仔閱讀 1,448評論 0 5
  • 內(nèi)容 關(guān)于圖層動畫相關(guān)框架的介紹 CoreAnimation結(jié)構(gòu)及圖層動畫 1. CoreGraphics,Qua...
    smallSun15閱讀 1,223評論 1 13
  • 大神互動主播悠悠小萱 來這里只為了分享自己的直播技巧等和心情 以及直播趣也歡迎廣大朋友來大神互動做客
    悠悠小萱閱讀 200評論 0 0
  • 十幾歲離家旷赖,至今已有20年了,三十多歲的我在離家?guī)装俟锿獾囊蛔〕怯兄约合矚g的工作流济,有著還算體貼的愛人,有著乖...
    辣媽ar閱讀 165評論 0 0