???????????????????????????????????????? 來(lái)自網(wǎng)絡(luò)摘抄? ---------
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鼠锈、簡(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à)一段拋物線
UIBezierPath是對(duì)CGPath的封裝,UIBezierPath存在于UIkit框架债热,下面實(shí)現(xiàn)上面相同功能的拋物線