quartz 2d是乙個二維圖形繪製引擎,它支援ios環境和mac os x環境,為開發者提供了很多方便,它在繪圖上的功能十分強大,如基於路徑的繪圖、透明度、陰影、顏色管理、反鋸齒、pdf文件生成等。quartz 2d作為core graphics框架的一部分,其中的很多資料型別和方法都是以cg為字首的。上文中介紹了graphics context的基礎知識,我們可以在context中設定顏色屬性,畫筆粗細等各種屬性,並繪製圖形。本篇內容將介紹cgpath的基礎知識和繪製曲線的基本流程。
那為什麼要用到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 在該方法內部...