iOS Quartz 2D 學習總結

2021-06-09 23:12:59 字數 4425 閱讀 9757

1.檢視繪畫週期:

drawrect方法,在任何時候,當檢視的一部分需要重畫時會呼叫。

觸發呼叫的四種情況: 

1>對遮擋您的檢視的其它檢視進行移動或刪除操作。

2>將檢視的hidden屬性宣告設定為no,使其從隱藏狀態變為可見。

3>將檢視滾出螢幕,然後再重新回到螢幕上。

4>顯式呼叫檢視的setneedsdisplay或者setneedsdisplayinrect:方法。

2.座標

檢視座標系統是以左上角為原點,向右、下延伸。quartz2d中則是以左下角為原點,向右、上延伸。 

3.圖形繪製環境

圖形繪製環境是對繪製環境(裝置)的乙個描述、封裝,型別是(cgcontextref)。

圖形繪製環境可以是pdf檔案、位圖、window、layer等。

cgcontextref context = uigraphicsgetcurrentcontext();

注:有的帖子上把context翻譯成圖形上下文,個人覺得應該為圖形繪製環境。

4.quartz顏色的使用

4.1首先要建立顏色空間:

cgcolorspaceref colorspace = cgcolorspacecreatedevicergb();//建立grb顏色空間

使用完畢後要釋放顏色空間:

cgcolorspacerelease(colorspace);

附:cgcolorspacecreatedevicegray() and cgcolorspacecreatedevicecmyk() 分別用來建立灰度、工業色彩空間

4.2建立元素

cgfloat components = ;//建立了rgba的藍色元素

4.3使用顏色空間、元素建立顏色資料結構

cgcolorref color = cgcolorcreate(colorspace, components);

使用完畢同樣要釋放cgcolorrelease(color);

還有一種方式建立顏色:使用uicolor類,需要轉換一下:[uicolor redcolor].cgcolor;可見這種方式比較省事。

1.繪製直線:

cgcontextsetlinewith(context,2.0);//線條粗細

cgcontextsetstrokecolorwithcolor(context,[uicolor redcolor].cgcolor);//線條顏色

cgcontextmovetopoint(context,100.0f,100.0f);//線條開始位置(100,100)

cgcontextaddlinetopoint(context,200.0f,200.0f);//線條結束位置(200,200)

cgcontextstrokepath(context);//路徑繪製

2.繪製:

uiimage *img=[uiimage named:@"xx.png"];

cgpoint imgpt=cgpointmake(100.0f,100.0f);

[img drawatpoint:imgpt];//[img drawinrect:cgrectmake(100,100,100,100)];

3.繪製圓形和矩形:

cgcontextref contextref = uigraphicsgetcurrentcontext();

cgcontextsetrgbstrokecolor(contextref,1.0f,1.0f,1.0f,1); //上下文,r,g,b,aphla值

cgcontextsetlinewith(context,2.0);//線條粗細

cgfloat components=(1.0f,0.0f,0.0f,1.0f);


cgcontextsetfillcolor(contextref ,components);

cgcontextaddrect(contextref, cgrectmake(50.0f, 50.0f, 100.0f, 100.0f));//繪畫矩形
  

cgcontextstrokepath(contextref);


cgcontextfillellipseinrect(contextref, cgrectmake(50.0f, 50.0f, 100.0f, 100.0f));//填充矩形中橢圓形

cgcontextfillrect(contextref, cgrectmake(150.0f, 150.0f, 100.0f, 100.0f));//繪畫圓形外的矩形

4.繪製圓弧:

cgcontextref contextref = uigraphicsgetcurrentcontext();
    

cgcontextsetrgbstrokecolor(contextref, 1.0f, 1.0f, 1.0f, 1);


cgcontextsetlinewidth(contextref, 2.0f);

cgcontextaddarc(contextref, 100.0f, 300.0f, 50.0f, 0.0f * ( m_pi/180 ), 90.0f * ( m_pi/180 ), 1);

//上下文圓心位置(100,300) 半徑50 起始角度0,結束角度90度 (1是順時針0是逆時)                   

cgcontextstrokepath(contextref);

cgcontextaddarc(contextref,100.0f);

5.繪製不規則形狀

cgcontextref contextref = uigraphicsgetcurrentcontext();
 

cgcontextsetrgbstrokecolor(contextref, 1.0f, 1.0f, 1.0f, 1);

cgcontextsetlinewidth(contextref, 2.0f);

cgfloat components = ;


cgcontextsetfillcolor(contextref, components);


cgcontextmovetopoint(contextref, 150.0f, 150.0f);


cgcontextaddlinetopoint(contextref, 200.0f, 170.0f);


cgcontextaddlinetopoint(contextref, 180.0f, 300.0f);


cgcontextaddlinetopoint(contextref, 80.0f, 300.0f);


cgcontextclosepath(contextref);//關閉路徑


cgcontextfillpath(contextref);//填充

cgcontextstrokepath(contextref);//不填充

6.繪製貝茲曲線

通過移動乙個起始點,然後通過兩個控制點,還有乙個中止點,呼叫cgcontextaddcurvetopoint() 函式繪製。

with control points `(cp1x, cp1y)' and `(cp2x, cp2y)'. */

void cgcontextaddcurvetopoint(cgcontextref c,cgfloat cp1x,

cgfloat cp1y, cgfloat cp2x, cgfloat cp2y, cgfloat x, cgfloat y)

二次貝茲曲線是通過呼叫cgcontextaddquadcurvetopoint()來繪製。引數為1個控制點,乙個中止點。

point to `(x, y)', with controlpoint `(cpx, cpy)'. */

void cgcontextaddquadcurvetopoint(cgcontextref c, cgfloat cpx,

cgfloat cpy, cgfloat x, cgfloat y)

7.繪製虛線

通過cgcontextsetlinedash()繪製:

/* set the line dash patttern in 

the current graphics state of `c'. */

void cgcontextsetlinedash(cgcontextref c, cgfloat phase,

const cgfloat lengths, size_t count)

引數:context:要描繪的上下文

phase:乙個float型別的點資料,表示在第乙個虛線繪製的時候跳過多少個點

lengths:乙個陣列,指名了虛線如何虛實,比如,代表,畫5個實,6個虛,4個實。

count:陣列長度

iOS Quartz2D畫畫板的實現

首先用storyboard搭建介面,沒有什麼好說的。然後就是注意的功能了,這裡用了觸控事件來搭配quartz2d的路徑來畫畫。思路就是把路徑放到陣列中 property nonatomic,strong nsmutablearray paths 這裡注意 如果用c語言的這個方式 cgmutablep...

CSS之2D 3D轉換總結

translate語法 x 就是 x 軸上水平移動 y 就是 y 軸上水平移動 transform translate x,y transform translatex n transfrom translatey n 演示 div rotate 旋轉 2d旋轉指的是讓元素在二維平面內順時針或者逆時...

cocos2d 學習筆記 2

ccspritebatchnode的作用很像cclayer,因為它本身並不顯示在螢幕上。不過 你只能把ccsprite加入ccspritebatchnode。ccspritebatchnode 將乙個檔名作為引數,使用這個引數的原因是所有被新增進 ccspritebatchnode的ccsprite...