關(guān)于CGContextRef和CGMutablePathRef&UIBezierPath

???????????????????????????????????????? 來(lái)自網(wǎng)絡(luò)摘抄? ---------


1.1背景知識(shí)

Graphics Context是圖形上下文,可以將其理解為一塊畫(huà)布,我們可以在上面進(jìn)行繪畫(huà)操作,繪制完成后,將畫(huà)布放到我們的view中顯示即可,view看作是一個(gè)畫(huà)框.

Quartz提供了以下幾種類型的Graphics Context:

Bitmap Graphics Context

PDF Graphics Context

Window Graphics Context

Layer Context

Post Graphics Context

先熟悉下CGContextRef

Functions by Task--按接口功能分

1饰抒、Managing Graphics Contexts--管理圖形上下文

CGContextFlush?????? 強(qiáng)制所有掛起的繪圖操作在一個(gè)窗口上下文中立即被渲染到目標(biāo)設(shè)備。

CGContextGetTypeID?? 返回Quartz圖形上下文的類型標(biāo)識(shí)符设江。

CGContextRelease???? 圖形上下文的引用計(jì)數(shù)-1瞄沙。

CGContextRetain??????圖形上下文的引用計(jì)數(shù)+1番宁。

CGContextSynchronize 將一個(gè)窗口的圖像上下文內(nèi)容更新驻谆,即所有的繪圖操作都會(huì)在下次同步到窗口上

2泥兰、Saving and Restoring the Current Graphics State--保存和恢復(fù)當(dāng)前圖形狀態(tài)

CGContextSaveGState 將當(dāng)前圖形狀態(tài)的副本PUSH到圖形狀態(tài)棧中笑旺;

每個(gè)圖形上下文維護(hù)一個(gè)保存圖形狀態(tài)的堆棧文留。需要注意的是好唯,注意,當(dāng)前繪圖環(huán)境的所有方面都是圖形狀態(tài)的元素。比如當(dāng)前路徑的圖像狀態(tài)是不考慮的燥翅,所以當(dāng)調(diào)用這

個(gè)函數(shù)的時(shí)候是不保存的骑篙。保存的圖像狀態(tài)如下:

CTM (current transformation matrix)

clip region

image interpolation quality

line width

line join

miter limit

line cap

line dash

flatness

should anti-alias

rendering intent

fill color space

stroke color space

fill color

stroke color

alpha value

font

font size

character spacing

text drawing mode

shadow parameters

the pattern phase

the font smoothing parameter

blend mode

CGContextRestoreGState 將當(dāng)前圖形狀態(tài)設(shè)置為最近一次保存的狀態(tài),即恢復(fù)狀態(tài)森书。

3靶端、Getting and Setting Graphics State Parameters--獲取和設(shè)置圖形狀態(tài)參數(shù)

CGContextGetInterpolationQuality??返回當(dāng)前的圖形上下文的插值(插值(Interpolation)是在不天生像素的環(huán)境下增長(zhǎng)圖像像素大小的一種方法,在周圍像素色彩

的根蒂根基上用算術(shù)公式計(jì)算亡失像素的色彩谎势。)質(zhì)量水平。

CGContextSetFlatness??????????????設(shè)置彎曲的路徑中的圖形上下文的準(zhǔn)確性杨名。

CGContextSetInterpolationQuality??設(shè)置圖形上下文的插值質(zhì)量水平脏榆。

CGContextSetLineCap?????????????? 圖形環(huán)境中的畫(huà)線的端點(diǎn)的樣式設(shè)置。

CGContextSetLineDash??????????????設(shè)置圖形上下文中的虛線的模式台谍。

CGContextSetLineJoin??????????????設(shè)置圖像上下文中的接接線的樣式须喂。

CGContextSetLineWidth???????????? 設(shè)置圖像上下文中的線的寬度。

CGContextSetMiterLimit????????????設(shè)置圖像上下文中的連接線的斜接限制趁蕊。

CGContextSetPatternPhase??????????設(shè)置一個(gè)上下文的段落模式坞生。

CGContextSetFillPattern?????????? 在指定的圖形上下文設(shè)置的填充圖案模式。

CGContextSetRenderingIntent?????? 在當(dāng)前圖形狀態(tài)設(shè)置渲染意向介衔。

CGContextSetShouldAntialias?????? 設(shè)置圖形上下文的抗鋸齒開(kāi)啟或關(guān)閉恨胚。

CGContextSetStrokePattern???????? 在指定的圖形上下文設(shè)置描邊圖案骂因。

CGContextSetBlendMode

CGContextSetAllowsAntialiasing

CGContextSetAllowsFontSmoothing

CGContextSetShouldSmoothFonts

CGContextSetAllowsFontSubpixelPositioning

CGContextSetShouldSubpixelPositionFonts

CGContextSetAllowsFontSubpixelQuantization

CGContextSetShouldSubpixelQuantizeFonts

4炎咖、Constructing Paths--構(gòu)建路徑

These functions are used to define the geometry of the current path. For more information on how paths are defined, see CGPath

Reference.

這些函數(shù)是用來(lái)定義路徑的幾何形狀。對(duì)于如何定義的路徑的更多信息寒波,請(qǐng)參閱CGPath參考乘盼。

CGContextAddArc

CGContextAddArcToPoint

CGContextAddCurveToPoint

CGContextAddLines

CGContextAddLineToPoint

CGContextAddPath

CGContextCopyPath

CGContextAddQuadCurveToPoint

CGContextAddRect

CGContextAddRects

CGContextBeginPath

CGContextClosePath

CGContextMoveToPoint

CGContextAddEllipseInRect

5、Painting Paths--繪畫(huà)路徑

These functions are used to stroke along or fill in the current path.

這些功能是用于邊緣或填充在當(dāng)前路徑俄烁。

CGContextClearRect

CGContextDrawPath

CGContextEOFillPath

CGContextFillPath

CGContextFillRect

CGContextFillRects

CGContextFillEllipseInRect

CGContextStrokePath

CGContextStrokeRect

CGContextStrokeRectWithWidth

CGContextReplacePathWithStrokedPath

CGContextStrokeEllipseInRect

CGContextStrokeLineSegments

6绸栅、Getting Information About Paths--獲取關(guān)于路徑的信息

CGContextIsPathEmpty????????????表示目前的路徑是否包含任何的子路徑。

CGContextGetPathCurrentPoint????返回一個(gè)非空的路徑中的當(dāng)前點(diǎn)页屠。

CGContextGetPathBoundingBox???? 返回包含當(dāng)前路徑的最小矩形粹胯。

CGContextPathContainsPoint??????檢查當(dāng)前路徑中是否包含指定的點(diǎn)。

7辰企、Modifying Clipping Paths--修改剪貼路徑

CGContextClip???????????????? 修改當(dāng)前剪貼路徑风纠,使用非零繞數(shù)規(guī)則。

CGContextEOClip?????????????? 修改當(dāng)前剪貼路徑牢贸,使用奇偶規(guī)則竹观。

CGContextClipToRect

CGContextClipToRects

CGContextGetClipBoundingBox

CGContextClipToMask

8、Setting Color, Color Space, and Shadow Values--設(shè)置顏色潜索,色彩空間和陰影值

CGContextSetAlpha

CGContextSetCMYKFillColor

CGContextSetFillColor

CGContextSetCMYKStrokeColor

CGContextSetFillColorSpace

CGContextSetFillColorWithColor

CGContextSetGrayFillColor

CGContextSetGrayStrokeColor

CGContextSetRGBFillColor

CGContextSetRGBStrokeColor

CGContextSetShadow

CGContextSetShadowWithColor

CGContextSetStrokeColor

CGContextSetStrokeColorSpace

CGContextSetStrokeColorWithColor

9臭增、Transforming User Space--轉(zhuǎn)換用戶空間

These functions allow you to examine and change the current transformation matrix (CTM) in a graphics context.

這些功能允許你檢查和更改圖形上下文的當(dāng)前轉(zhuǎn)換矩陣(CTM)。

CGContextConcatCTM

CGContextGetCTM

CGContextRotateCTM

CGContextScaleCTM

CGContextTranslateCTM

10竹习、Using Transparency Layers--使用透明圖層

CGContextBeginTransparencyLayer??????????開(kāi)始一個(gè)透明層誊抛。

直到相應(yīng)的調(diào)用CGContextEndTransparencyLayer,在指定范圍內(nèi)的所有后續(xù)繪制操作組合到一個(gè)完全透明的背景(它被視為一個(gè)單獨(dú)的目標(biāo)緩沖區(qū)從上下文)整陌。

調(diào)用CGContextEndTransparencyLayer拗窃,使用全局alpha和陰影的上下文狀態(tài)合成到上下文中昔园。

CGContextBeginTransparencyLayerWithRect??開(kāi)始透明度層,它的邊界是指定的矩形并炮,其內(nèi)容是有界的默刚。

CGContextEndTransparencyLayer????????????結(jié)束一個(gè)透明層。

11逃魄、Drawing an Image to a Graphics Context--繪制圖像圖形上下文

CGContextDrawTiledImage 重復(fù)繪制的圖像荤西,擴(kuò)展到提供的矩形,填補(bǔ)當(dāng)前剪輯區(qū)域伍俘。

CGContextDrawImage??????繪制圖像到圖形上下文中邪锌。

12、Drawing PDF Content to a Graphics Context--繪制一個(gè)圖形上下文的PDF內(nèi)容

CGContextDrawPDFPage????繪制一個(gè)PDF頁(yè)面到當(dāng)前的用戶空間癌瘾。

13觅丰、Drawing With a Gradient--制圖漸變

CGContextDrawLinearGradient??繪制一個(gè)漸變填充定義的出發(fā)點(diǎn)和落腳點(diǎn)沿線變化。

CGContextDrawRadialGradient??繪制一個(gè)沿著由所提供的開(kāi)始和結(jié)束的圓限定的區(qū)域變化的漸變填充妨退。

14妇萄、Drawing With a Shading--制圖底紋

CGContextDrawShading??使用指定的陰影的背景,填充剪切路徑咬荷。

15冠句、Setting Up a Page-Based Graphics Context--建立一個(gè)基于頁(yè)面的圖形上下文

CGContextBeginPage????基于頁(yè)面的圖形上下文中開(kāi)始了新的一頁(yè)。

CGContextEndPage??????在基于頁(yè)面的圖形上下文結(jié)束當(dāng)前的頁(yè)面幸乒。

16懦底、Drawing Glyphs--繪制字形

CGContextShowGlyphs???????????? 在當(dāng)前文本位置顯示一個(gè)數(shù)組的字形。

CGContextShowGlyphsAtPoint??????在指定的位置顯示一個(gè)數(shù)組的字形罕扎。

CGContextShowGlyphsWithAdvances 繪制具有不同的偏移量的一個(gè)數(shù)組字形聚唐。

CGContextShowGlyphsAtPositions??在所提供的位置繪制字形。

17腔召、Drawing Text--繪制文本

CGContextGetTextMatrix????????返回當(dāng)前文本矩陣杆查。

CGContextGetTextPosition??????返回在繪制文本的位置。

CGContextSelectFont?????????? 設(shè)置在一個(gè)圖形上下文的字體和字體大小宴咧。

CGContextSetCharacterSpacing??設(shè)置當(dāng)前字符間距根灯。

CGContextSetFont??????????????設(shè)置上下文的字體。

CGContextSetFontSize??????????設(shè)置上下文的字體大小掺栅。

CGContextSetTextDrawingMode?? 設(shè)置當(dāng)前文本的繪圖模式烙肺。

CGContextSetTextMatrix????????設(shè)置當(dāng)前文本矩陣。

CGContextSetTextPosition??????設(shè)置要繪制文本的位置氧卧。

CGContextShowText???????????? 在當(dāng)前文本位置桃笙,由目前的文本矩陣指定的點(diǎn)顯示一個(gè)字符數(shù)組。

CGContextShowTextAtPoint??????在指定的位置顯示一個(gè)字符串沙绝。

18搏明、Converting Between Device Space and User Space--設(shè)備空間和用戶空間之間的轉(zhuǎn)換

CGContextGetUserSpaceToDeviceSpaceTransform

CGContextConvertPointToDeviceSpace

CGContextConvertPointToUserSpace

CGContextConvertSizeToDeviceSpace

CGContextConvertSizeToUserSpace

CGContextConvertRectToDeviceSpace

CGContextConvertRectToUserSpace

1.2CGContextRef用法

1鼠锈、簡(jiǎn)介Quartz。

Quartz 是主要的描畫(huà)接口星著,支持基于路徑的描畫(huà)购笆、抗鋸齒渲染、漸變填充模式虚循、圖像同欠、顏色、坐標(biāo)空間變換横缔、以及PDF 文檔的創(chuàng)建铺遂、顯示、和分析茎刚。UIKit 為Quartz 的圖像和顏色操作提供了Objective-C 的封裝襟锐。Core Animation

為很多UIKit 的視圖屬性聲明的動(dòng)畫(huà)效果提供底層支持,也可以用于實(shí)現(xiàn)定制的動(dòng)畫(huà)膛锭。

在調(diào)用您提供的drawRect:方法之前粮坞,視圖對(duì)象會(huì)自動(dòng)配置其描畫(huà)環(huán)境,使您的代碼可以立即進(jìn)行描畫(huà)泉沾。作為這些配置的一部分捞蚂,UIView 對(duì)象會(huì)為當(dāng)前描畫(huà)環(huán)境創(chuàng)建一個(gè)圖形上下文(對(duì)應(yīng)于CGContextRef 封裝類型)

用戶坐標(biāo)空間是您發(fā)出的所有描畫(huà)命令的工作環(huán)境。該空間的單位由點(diǎn)來(lái)表示跷究。設(shè)備坐標(biāo)空間指的是設(shè)備內(nèi)在的坐標(biāo)空間,由像素來(lái)表示敲霍。缺省情況下俊马,用戶坐標(biāo)空間上的一個(gè)點(diǎn)等于設(shè)備坐標(biāo)空間的一個(gè)像素,這意味著一個(gè)點(diǎn)等于1/160英寸肩杈。然而柴我,您不應(yīng)該假定這個(gè)比例總是1:1。

UIColor 對(duì)象提供了一些便利方法扩然,用于通過(guò)RGB艘儒、HSB、和灰度值指定顏色值夫偶。

您也可以使用Core Graphics 框架中的CGContextSetRGBStrokeColor 和CGContextSetRGBFillColor 函數(shù)來(lái)創(chuàng)建和設(shè)置顏色界睁。

路徑輪廓可以用像CGContextStrokePath 這樣的函數(shù)來(lái)畫(huà),即用當(dāng)前的筆劃顏色畫(huà)出以路徑為中心位置的線兵拢。路徑的填充則可以用CGContextFillPath 函數(shù)來(lái)實(shí)現(xiàn)翻斟,它的功能是用當(dāng)前的填充顏色或樣式填充路徑線段包圍的區(qū)域。

獲取上下文说铃,圖形上下文是什么意思访惜?

CGContextRef context = UIGraphicsGetCurrentContext();

2嘹履、簡(jiǎn)單的示例代碼

[cpp] view plaincopy

// 畫(huà)一個(gè)正方形圖形 沒(méi)有邊框

CGContextSetRGBFillColor(context, 0, 0.25, 0, 0.5);

CGContextFillRect(context, CGRectMake(2, 2, 270, 270));

CGContextStrokePath(context);

// 寫(xiě)文字

CGContextSetLineWidth(context, 1.0);

CGContextSetRGBFillColor (context,??1, 1, 1, 1.0);

UIFont??*font = [UIFont boldSystemFontOfSize:11.0];

[@"fangyp" drawInRect:CGRectMake(40, 40, 80, 20) withFont:font];

// 畫(huà)一條線

CGContextSetRGBStrokeColor(context, 0.5, 0.5, 0.5, 0.5);//線條顏色

CGContextMoveToPoint(context, 20, 20);

CGContextAddLineToPoint(context, 200,20);

CGContextStrokePath(context);

// 畫(huà)正方形邊框

CGContextSetRGBStrokeColor(context, 1, 1.0, 1.0, 1.0);

CGContextSetLineWidth(context, 2.0);

CGContextAddRect(context, CGRectMake(2, 2, 270, 270));

CGContextStrokePath(context);

// 畫(huà)方形背景顏色

CGContextTranslateCTM(ctx, 0.0f, self.view.bounds.size.height);

CGContextScaleCTM(ctx, 1.0f, -1.0f);

UIGraphicsPushContext(ctx);

CGContextSetLineWidth(ctx,320);

CGContextSetRGBStrokeColor(ctx, 250.0/255, 250.0/255, 210.0/255, 1.0);

CGContextStrokeRect(ctx, CGRectMake(0, 0, 320, 460));

UIGraphicsPopContext();


2.CGPathRef

如下demo用cgpath畫(huà)一段拋物線

2.UIBezierPath

UIBezierPath是對(duì)CGPath的封裝,UIBezierPath存在于UIkit框架债热,下面實(shí)現(xiàn)上面相同功能的拋物線

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末砾嫉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子窒篱,更是在濱河造成了極大的恐慌焰枢,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舌剂,死亡現(xiàn)場(chǎng)離奇詭異济锄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)霍转,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)荐绝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人避消,你說(shuō)我怎么就攤上這事低滩。” “怎么了岩喷?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵恕沫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我纱意,道長(zhǎng)婶溯,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任偷霉,我火速辦了婚禮迄委,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘类少。我一直安慰自己叙身,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布硫狞。 她就那樣靜靜地躺著信轿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪残吩。 梳的紋絲不亂的頭發(fā)上财忽,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音世剖,去河邊找鬼定罢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛旁瘫,可吹牛的內(nèi)容都是我干的祖凫。 我是一名探鬼主播琼蚯,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼惠况!你這毒婦竟也來(lái)了遭庶?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤稠屠,失蹤者是張志新(化名)和其女友劉穎峦睡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體权埠,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡榨了,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了攘蔽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片龙屉。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖满俗,靈堂內(nèi)的尸體忽然破棺而出转捕,到底是詐尸還是另有隱情,我是刑警寧澤唆垃,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布五芝,位于F島的核電站,受9級(jí)特大地震影響辕万,放射性物質(zhì)發(fā)生泄漏枢步。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一蓄坏、第九天 我趴在偏房一處隱蔽的房頂上張望价捧。 院中可真熱鬧,春花似錦涡戳、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至推正,卻和暖如春恍涂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背植榕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工再沧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尊残。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓炒瘸,卻偏偏與公主長(zhǎng)得像淤堵,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子顷扩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • --繪圖與濾鏡全面解析 概述 在iOS中可以很容易的開(kāi)發(fā)出絢麗的界面效果拐邪,一方面得益于成功系統(tǒng)的設(shè)計(jì),另一方面得益...
    韓七夏閱讀 2,710評(píng)論 2 10
  • Core Graphics Framework是一套基于C的API框架隘截,使用了Quartz作為繪圖引擎扎阶。它提供了低...
    ShanJiJi閱讀 1,515評(píng)論 0 20
  • 學(xué)日語(yǔ)的原因如下: 1.劍道茶道 2.芥川龍之介 3.沒(méi)有學(xué)過(guò)方塊字的外語(yǔ) 4.認(rèn)識(shí)了一些會(huì)日語(yǔ)或是喜歡日本文化或...
    scot0714閱讀 658評(píng)論 11 2
  • pragma mark 引用計(jì)數(shù)器和dealloc基本概念 pragma mark 概念 pragma mark 代碼
    liyuhong165閱讀 282評(píng)論 0 0
  • 9.18 韓安祺 功課:不尊重,我不尊重我的中藥醫(yī)生婶芭,八月份中藥終于斷斷續(xù)續(xù)吃完了东臀,我極其不愿意的給醫(yī)生打電話,讓...
    AIA韓安祺閱讀 155評(píng)論 0 0