一、什么是Quartz2D
Quartz 2D是?個(gè)二維繪圖引擎,同時(shí)支持iOS和Mac系統(tǒng)
Quartz 2D能完成的工作:
繪制圖形 : 線條\三角形\矩形\圓\弧等
繪制文字
繪制\生成圖片(圖像)
讀取\生成PDF
截圖\裁剪圖片
自定義UI控件
二、Quartz2D在iOS開(kāi)發(fā)中的價(jià)值
為了便于搭建美觀的UI界面,iOS提供了UIKit框架,??有各種各樣的UI控件
UILabel:顯?文字
UIImageView:顯示圖片
UIButton:同時(shí)顯示圖片和?字(能點(diǎn)擊)
利?UIKit框架提供的控件,拼拼湊湊,能搭建和現(xiàn)實(shí)一些簡(jiǎn)單、常見(jiàn)的UI界?
但是,有些UI界面極其復(fù)雜、?且?較個(gè)性化,?普通的UI控件無(wú)法實(shí)現(xiàn),這時(shí)可以利用Quartz2D技術(shù)將控件內(nèi)部的結(jié)構(gòu)畫出來(lái),自定義控件的樣子
其實(shí),iOS中?部分控件的內(nèi)容都是通過(guò)Quartz2D畫出來(lái)的
因此,Quartz2D在iOS開(kāi)發(fā)中很重要的?個(gè)價(jià)值是:自定義view(自定義UI控件)
三、圖形上下文
圖形上下文(Graphics Context):是一個(gè)CGContextRef類型的數(shù)據(jù)
圖形上下文的作用:
(1)保存繪圖信息、繪圖狀態(tài)
(2)決定繪制的輸出目標(biāo)(繪制到什么地?去?) (輸出目標(biāo)可以是PDF?文件、Bitmap或者顯示器的窗口上)

相同的?套繪圖序列,指定不同的Graphics Context,就可將相同的圖像繪制到不同的目標(biāo)上

四、自定義view
如何利用Quartz2D?定義view?(?定義UI控件)
如何利用Quartz2D繪制東西到view上?
首先,得有圖形上下文,因?yàn)樗鼙4胬L圖信息,并且決定著繪制到什么地方去
其次,那個(gè)圖形上下?必須跟view相關(guān)聯(lián),才能將內(nèi)容繪制到view上面
?定義view的步驟:
(1)新建?個(gè)類,繼承自UIView
(2)實(shí)現(xiàn)-(void)drawRect:(CGRect)rect?法.然后在這個(gè)?方法中 :
1)取得跟當(dāng)前view相關(guān)聯(lián)的圖形上下文;
2)繪制相應(yīng)的圖形內(nèi)容
3)利用圖形上下文將繪制的所有內(nèi)容渲染顯示到view上面
五、補(bǔ)充說(shuō)明
1.drawRect:
(1)為什么要實(shí)現(xiàn)drawRect:?法才能繪圖到view上?
因?yàn)樵赿rawRect:?法中才能取得跟view相關(guān)聯(lián)的圖形上下文
(2)drawRect:?法在什么時(shí)候被調(diào)用?
當(dāng)view第一次顯示到屏幕上時(shí)(被加到UIWindow上顯示出來(lái))
調(diào)用view的setNeedsDisplay或者setNeedsDisplayInRect:時(shí)
2.Quartz2D須知
Quartz2D的API是純C語(yǔ)?言的
Quartz2D的API來(lái)自于Core Graphics框架
數(shù)據(jù)類型和函數(shù)基本都以CG作為前綴
CGContextRef
CGPathRef
CGContextStrokePath(ctx);
3.drawRect:中取得的上下?文
在drawRect:方法中取得上下文后,就可以繪制東西到view上
View內(nèi)部有個(gè)layer(圖層)屬性,drawRect:方法中取得的是一個(gè)Layer Graphics Context,因此,繪制的東西其實(shí)是繪制到view的layer上去了
View之所以能顯示東西,完全是因?yàn)樗鼉?nèi)部的layer