Quartz 2D學習(二)繪製曲線

2021-09-19 14:10:02 字數 1748 閱讀 5692

quartz 2d是乙個二維圖形繪製引擎,它支援ios環境和mac os x環境,為開發者提供了很多方便,它在繪圖上的功能十分強大,如基於路徑的繪圖、透明度、陰影、顏色管理、反鋸齒、pdf文件生成等。quartz 2d作為core graphics框架的一部分,其中的很多資料型別和方法都是以cg為字首的。

本篇內容將介紹cgpath的基礎知識和繪製曲線的基本流程。

上文中介紹了graphics context的基礎知識,我們可以在context中設定顏色屬性,畫筆粗細等各種屬性,並繪製圖形。

那為什麼要用到cgpath呢?

首先,我們要回顧一下graphics context如何繪製路徑

呼叫cgcontextbeginpath

呼叫cgcontextmovetopoint來設定路徑的起點

呼叫cgpathaddlinetopoint, cgpathaddarc, cgpathaddrect等函式新增路徑

最後,我們需要呼叫fill或stroke來繪製出這些路徑或圖形。

當我們繪製路徑時,path的資訊就會被graphics context重置。

如果我們想要儲存path資訊,並多次使用它,我們就可以用到cgpathcreatmutable申請路徑,然後用cgpathaddlinttopoint等方法來新增路徑。

我們來實驗一下,用cgpath來畫一條曲線。

- (void)drawrect:(cgrect)rect
於是可以得到乙個起點在(100, 100) 半徑為100的藍色曲線。

用cgpath畫矩形(其他的圖形類似)

- (void)drawrect:(cgrect)rect
如果我們想要在ios應用上繪製圖形,就必須先申請乙個uiview物件,然後實現drawrect:方法。

在檢視顯示在螢幕上時或者內容需要更新時,drawrect:方法會被呼叫。所以我們不需要手動去呼叫這個方法。手動更新內容的方法是setneedsdisplay。

uiview物件的可以通過cgcontextref對當前的繪圖環境進行配置,如上文提到的獲取上下文,設定顏色屬性,設定填充屬性等。

void cgpathaddarc (

cgmutablepathref _nullable path,

const cgaffinetransform * _nullable m,

cgfloat x,

cgfloat y,

cgfloat radius,

cgfloat startangle,

cgfloat endangle,

bool clockwise

);

其中(x, y)代表圓心,sa代表起始角度,ea代表結束角度,radius代表半徑,clockwise代表順時針還是逆時針

void cgpathaddarctopoint (

cgmutablepathref _nullable path,

const cgaffinetransform * _nullable m,

cgfloat x1,

cgfloat y1,

cgfloat x2,

cgfloat y2,

cgfloat radius

);

p1為path的起始點,這個弧線會以兩條直線為切線,radius為半徑畫弧。

stackoverflow

繪製曲線 Quartz 2D

quartz 2d提供了cgcontextaddcurvetopoint 和cgcontextaddquadcurvetopoint 兩個函式向cgcontextref的當前路徑上新增曲線,前者用於新增貝塞爾曲線,後者用於新增二次曲線。繪製貝塞爾曲線的示意圖如圖12.10所示。從圖12.10可以看出...

Quartz2D學習筆記

1 drawrect方法 1.證明drawrect方法是在viewdidload後自動呼叫的,方便處理view的相關屬性 yqview view yqview alloc initwithframe self.view.bounds self.view addsubview view 證明如果在初始...

學習筆記 quartz2D

quartz2d是屬於core graphic框架,該框架是基於c的api。quartz2d用於繪製平面圖形。新增uiview的子類myview,在myview.m中實現如下方法 1 pragma mark 在這個方法內部進行繪圖 2 void drawrect cgrect rect 在該方法內部...