亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

瘋狂ios講義之使用路徑

發布時間:2020-05-25 22:46:33 來源:網絡 閱讀:814 作者:fkJava李剛 欄目:移動開發

正如前面提到的Quartz 2D只提供了繪制矩形、橢圓的函數并沒有直接提供繪制圓角矩形、三角形等幾何圖形的函數。為了繪制更復雜的圖形必須啟用路徑。

12.4列出了Quartz 2D為創建路徑提供的函數。

12.4創建路徑的相關函數

瘋狂ios講義之使用路徑

除此之外Quartz 2D還提供了如下函數來獲取當前CGContextRef所包含的路徑信息。

bool CGContextIsPathEmpty(CGContextRef c)該函數用于判斷指定CGContextRef包含的路徑是否為空。

CGPoint CGContextGetPathCurrentPoint(CGContextRef c)該函數用于返回指定CGContextRef包含的路徑的當前點。

CGRect CGContextGetPathBoundingBox(CGContextRef c)該函數用于返回指定CGContextRef中能完整包圍所有路徑的最小矩形。

bool CGContextPathContainsPoint(CGContextRef context, CGPoint point, CGPathDrawingMode mode)該函數判斷指定CGContextRef包含的路徑按指定繪制模式進行繪制時是否需要繪制point點。

為了在Canvas中使用路徑可按如下步驟進行。

調用CGContextBeginPath()函數開始定義路徑。

調用表12.4所示的各種函數添加子路徑。

如果路徑添加完成調用CGContextClosePath()函數關閉路徑。

調用CGContextDrawPath()CGContextEOFillPath()CGContextFillPath()CGContextStrokePath()函數來填充路徑或繪制路徑邊框即可。在這些方法中第一個方法可以代替后面的幾個方法第一個方法指定使用特定的模式來繪制圖形它支持如下幾種繪制方式。

kCGPathFill指定填充路徑。相當于CGContextFillPath()函數。

kCGPathEOFill指定采用even-odd模式填充路徑。相當于CGContextEOFillPath()函數。

kCGPathStroke指定只繪制路徑。相當于CGContextStrokePath()函數。

kCGPathFillStroke指定既繪制路徑也填充路徑。如果采用這種繪制方式必須使用該函數。

kCGPathEOFillStroke指定既繪制路徑也采用even-odd模式填充路徑。如果采用這種繪制方式必須使用該函數。

通過上面介紹的CGContextAddArc()函數我們可以繪制扇形下面的程序代碼使用循環繪制了10個扇形而且這10個扇形的透明度逐漸降低。首先創建一個Single View ApplicationApplication包含一個應用程序委托代理類、一個視圖控制器和配套的Storyboard界面設計文件。將該界面設計文件中最大的View改為使用自定義的FKArcView類。該程序的控制器類幾乎無須修改只要重寫FKArcViewdrawRect:方法在該方法中使用路徑繪制扇形即可。

下面是FKArcView類的實現代碼。

程序清單codes/12/12.2/AddArcTest/AddArcTest/FKArcView.m




瘋狂ios講義之使用路徑

面程序中的粗體字代碼繪制了從M_PI * 1.5角度12點方向開始到M_PI角度9點方向結束的扇形——在該繪圖API0度代表X軸方向也就是3點方向。需要指出的是關于CGContextAddArc()函數的最后一個參數官方文檔介紹該參數為0代表逆時針但筆者運行時看到的效果是0代表順指針可參見下面的運行效果。

編譯、運行該程序可以看到如圖12.7所示的效果。

瘋狂ios講義之使用路徑

從上面程序的運行結果來看相信讀者對CGContextAddArc (CGContextRef c, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise)函數的用法已經比較清楚該方法的第23個參數指定圓弧的圓心第4個參數用于設置圓弧的半徑第56個參數則用于設置圓弧的開始角度、結束角度最后一個參數用于設置是否順時針旋轉。

可能有讀者對CGContextAddArcToPoint(CGContextRef c, CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2, CGFloat radius)函數感到疑惑該方法也是添加一段圓弧路徑。確定這段圓弧的方式是假設從當前點到P1x1y1繪制一條線條再從 P1x1y1P2x2y2繪制一條線條CGContextAddArcToPoint()則繪制一條同時與上面兩條線條相切且半徑為radius的圓弧。該函數方法的示意圖如圖12.8所示。

瘋狂ios講義之使用路徑

12.8CGContextAddArcToPoint()函數的示意

借助CGContextAddArcToPoint()CGContextAddLineToPoint()函數可以非常容易地實現添加圓角矩形路徑的方法所謂圓角矩形就是在矩形的每個角都繪制一段90°的圓弧。除此之外還有CGContextMoveToPoint(CGContextRef c, CGFloat x, CGFloat y)函數用于把繪制點移動到指定位置借助這些方法還可以繪制任意的多角星。

下面的程序代碼將會開發兩個自定義函數一個用于添加圓角矩形一個用于添加多角星。程序代碼如下。

程序清單codes/12/12.2/PathTest/FKContext.h


瘋狂ios講義之使用路徑

瘋狂ios講義之使用路徑

上面兩個函數都沒有執行任何繪制操作它們都只是向當前CGContextRef中添加路徑第一個函數用于添加一個圓角矩形路徑第二個函數用于添加一個多角星路徑。


上面這個函數庫與項目無關該函數庫中包含的兩個函數完全可以在任何項目中復用。因此如果讀者以后的項目需要繪制圓角矩形、多角星只要將該文件復制到項目中并導入該函數庫即可調用這兩個函數添加路徑。

瘋狂ios講義之使用路徑實例繪制任意多角星

下面創建一個應用來繪制圓角矩形和多角星。首先創建一個Single View ApplicationApplication包含一個應用程序委托代理類、一個視圖控制器和配套的Storyboard界面設計文件。將該界面設計文件中最大的View改為使用自定義的FKPathView類。該程序的控制器類幾乎無須修改只要重寫FKPathViewdrawRect:方法在該方法中調用FKContext.h中的方法來添加圓角矩形、多角星路徑然后根據需要采用不同的方式繪制這些路徑即可。

下面是FKPathView類的實現代碼。

程序清單codes/12/12.2/PathTest/FKPathView.m

瘋狂ios講義之使用路徑

瘋狂ios講義之使用路徑


上面程序的第一行粗體字代碼導入了FKContext.h文件接下來的粗體字代碼多次調用了CGContextAddRoundRect()函數和CGContextAddStar()函數來添加圓角矩形和多角星。編譯、運行該程序即可看到如圖12.9所示的效果。

瘋狂ios講義之使用路徑



————本文節選自《瘋狂ios講義上》

瘋狂ios講義之使用路徑


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

枣强县| 英吉沙县| 徐州市| 仲巴县| 义马市| 明光市| 清新县| 安福县| 辛集市| 深水埗区| 青铜峡市| 吉首市| 黑河市| 盈江县| 秭归县| 延庆县| 进贤县| 丰都县| 拜城县| 依兰县| 深圳市| 长宁县| 红河县| 石嘴山市| 赤峰市| 鸡东县| 宁海县| 麻城市| 鹤山市| 永丰县| 盘山县| 普兰店市| 固阳县| 安多县| 石城县| 门头沟区| 尚义县| 安顺市| 永兴县| 饶阳县| 仁怀市|