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...