正如前面提到的Quartz 2D只提供了繪制矩形、橢圓的函數(shù)并沒(méi)有直接提供繪制圓角矩形、三角形等幾何圖形的函數(shù)。為了繪制更復(fù)雜的圖形必須啟用路徑。
為章貢等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及章貢網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站建設(shè)、網(wǎng)站制作、章貢網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!表12.4列出了Quartz 2D為創(chuàng)建路徑提供的函數(shù)。
表12.4創(chuàng)建路徑的相關(guān)函數(shù)
除此之外Quartz 2D還提供了如下函數(shù)來(lái)獲取當(dāng)前CGContextRef所包含的路徑信息。
bool CGContextIsPathEmpty(CGContextRef c)該函數(shù)用于判斷指定CGContextRef包含的路徑是否為空。
CGPoint CGContextGetPathCurrentPoint(CGContextRef c)該函數(shù)用于返回指定CGContextRef包含的路徑的當(dāng)前點(diǎn)。
CGRect CGContextGetPathBoundingBox(CGContextRef c)該函數(shù)用于返回指定CGContextRef中能完整包圍所有路徑的最小矩形。
bool CGContextPathContainsPoint(CGContextRef context, CGPoint point, CGPathDrawingMode mode)該函數(shù)判斷指定CGContextRef包含的路徑按指定繪制模式進(jìn)行繪制時(shí)是否需要繪制point點(diǎn)。
為了在Canvas中使用路徑可按如下步驟進(jìn)行。
調(diào)用CGContextBeginPath()函數(shù)開(kāi)始定義路徑。
調(diào)用表12.4所示的各種函數(shù)添加子路徑。
如果路徑添加完成調(diào)用CGContextClosePath()函數(shù)關(guān)閉路徑。
調(diào)用CGContextDrawPath()、CGContextEOFillPath()、CGContextFillPath()或CGContextStrokePath()函數(shù)來(lái)填充路徑或繪制路徑邊框即可。在這些方法中第一個(gè)方法可以代替后面的幾個(gè)方法第一個(gè)方法指定使用特定的模式來(lái)繪制圖形它支持如下幾種繪制方式。
kCGPathFill指定填充路徑。相當(dāng)于CGContextFillPath()函數(shù)。
kCGPathEOFill指定采用even-odd模式填充路徑。相當(dāng)于CGContextEOFillPath()函數(shù)。
kCGPathStroke指定只繪制路徑。相當(dāng)于CGContextStrokePath()函數(shù)。
kCGPathFillStroke指定既繪制路徑也填充路徑。如果采用這種繪制方式必須使用該函數(shù)。
kCGPathEOFillStroke指定既繪制路徑也采用even-odd模式填充路徑。如果采用這種繪制方式必須使用該函數(shù)。
通過(guò)上面介紹的CGContextAddArc()函數(shù)我們可以繪制扇形下面的程序代碼使用循環(huán)繪制了10個(gè)扇形而且這10個(gè)扇形的透明度逐漸降低。首先創(chuàng)建一個(gè)Single View Application該Application包含一個(gè)應(yīng)用程序委托代理類(lèi)、一個(gè)視圖控制器和配套的Storyboard界面設(shè)計(jì)文件。將該界面設(shè)計(jì)文件中大的View改為使用自定義的FKArcView類(lèi)。該程序的控制器類(lèi)幾乎無(wú)須修改只要重寫(xiě)FKArcView的drawRect:方法在該方法中使用路徑繪制扇形即可。
下面是FKArcView類(lèi)的實(shí)現(xiàn)代碼。
程序清單codes/12/12.2/AddArcTest/AddArcTest/FKArcView.m
面程序中的粗體字代碼繪制了從M_PI * 1.5角度12點(diǎn)方向開(kāi)始到M_PI角度9點(diǎn)方向結(jié)束的扇形——在該繪圖API中0度代表X軸方向也就是3點(diǎn)方向。需要指出的是關(guān)于CGContextAddArc()函數(shù)的最后一個(gè)參數(shù)官方文檔介紹該參數(shù)為0代表逆時(shí)針但筆者運(yùn)行時(shí)看到的效果是0代表順指針可參見(jiàn)下面的運(yùn)行效果。
編譯、運(yùn)行該程序可以看到如圖12.7所示的效果。
從上面程序的運(yùn)行結(jié)果來(lái)看相信讀者對(duì)CGContextAddArc (CGContextRef c, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise)函數(shù)的用法已經(jīng)比較清楚該方法的第2、3個(gè)參數(shù)指定圓弧的圓心第4個(gè)參數(shù)用于設(shè)置圓弧的半徑第5、6個(gè)參數(shù)則用于設(shè)置圓弧的開(kāi)始角度、結(jié)束角度最后一個(gè)參數(shù)用于設(shè)置是否順時(shí)針旋轉(zhuǎn)。
可能有讀者對(duì)CGContextAddArcToPoint(CGContextRef c, CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2, CGFloat radius)函數(shù)感到疑惑該方法也是添加一段圓弧路徑。確定這段圓弧的方式是假設(shè)從當(dāng)前點(diǎn)到P1x1、y1繪制一條線條再?gòu)?P1x1、y1到P2x2、y2繪制一條線條CGContextAddArcToPoint()則繪制一條同時(shí)與上面兩條線條相切且半徑為radius的圓弧。該函數(shù)方法的示意圖如圖12.8所示。
圖12.8CGContextAddArcToPoint()函數(shù)的示意
借助CGContextAddArcToPoint()和CGContextAddLineToPoint()函數(shù)可以非常容易地實(shí)現(xiàn)添加圓角矩形路徑的方法所謂圓角矩形就是在矩形的每個(gè)角都繪制一段90°的圓弧。除此之外還有CGContextMoveToPoint(CGContextRef c, CGFloat x, CGFloat y)函數(shù)用于把繪制點(diǎn)移動(dòng)到指定位置借助這些方法還可以繪制任意的多角星。
下面的程序代碼將會(huì)開(kāi)發(fā)兩個(gè)自定義函數(shù)一個(gè)用于添加圓角矩形一個(gè)用于添加多角星。程序代碼如下。
程序清單codes/12/12.2/PathTest/FKContext.h
上面兩個(gè)函數(shù)都沒(méi)有執(zhí)行任何繪制操作它們都只是向當(dāng)前CGContextRef中添加路徑第一個(gè)函數(shù)用于添加一個(gè)圓角矩形路徑第二個(gè)函數(shù)用于添加一個(gè)多角星路徑。
上面這個(gè)函數(shù)庫(kù)與項(xiàng)目無(wú)關(guān)該函數(shù)庫(kù)中包含的兩個(gè)函數(shù)完全可以在任何項(xiàng)目中復(fù)用。因此如果讀者以后的項(xiàng)目需要繪制圓角矩形、多角星只要將該文件復(fù)制到項(xiàng)目中并導(dǎo)入該函數(shù)庫(kù)即可調(diào)用這兩個(gè)函數(shù)添加路徑。
實(shí)例繪制任意多角星
下面創(chuàng)建一個(gè)應(yīng)用來(lái)繪制圓角矩形和多角星。首先創(chuàng)建一個(gè)Single View Application該Application包含一個(gè)應(yīng)用程序委托代理類(lèi)、一個(gè)視圖控制器和配套的Storyboard界面設(shè)計(jì)文件。將該界面設(shè)計(jì)文件中大的View改為使用自定義的FKPathView類(lèi)。該程序的控制器類(lèi)幾乎無(wú)須修改只要重寫(xiě)FKPathView的drawRect:方法在該方法中調(diào)用FKContext.h中的方法來(lái)添加圓角矩形、多角星路徑然后根據(jù)需要采用不同的方式繪制這些路徑即可。
下面是FKPathView類(lèi)的實(shí)現(xiàn)代碼。
程序清單codes/12/12.2/PathTest/FKPathView.m
上面程序的第一行粗體字代碼導(dǎo)入了FKContext.h文件接下來(lái)的粗體字代碼多次調(diào)用了CGContextAddRoundRect()函數(shù)和CGContextAddStar()函數(shù)來(lái)添加圓角矩形和多角星。編譯、運(yùn)行該程序即可看到如圖12.9所示的效果。
————本文節(jié)選自《瘋狂ios講義上》
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
分享名稱(chēng):瘋狂ios講義之使用路徑-創(chuàng)新互聯(lián)
URL地址:http://aaarwkj.com/article10/coghdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、服務(wù)器托管、建站公司、網(wǎng)頁(yè)設(shè)計(jì)公司、搜索引擎優(yōu)化、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容