drawRect中一些方法的呼叫

2022-07-25 09:39:10 字數 3134 閱讀 8581

常會遇到一種情況,在drawrect中用上下文繪製了乙個圖形,當執行時發現除了自己的圖形外,其他的背景都是黑的。這是因為沒有給其他的區域設定顏色

設定方法:

-(void

)drawrect:(cgrect)rect

上下文只有在drawrect中獲得才有作用,其他方法中獲取值為空

drawrect中繪圖,可以使用上下文,也可以使用cashapelayer進行繪製,layer繪製的話,有乙個好處就是layer有個

zposition屬性(值越大顯示越靠上),可以動態的設定 layer的層級,而上下文繪製是按先繪製的在下,層級不好控制

兩種方式劃線

layer:

cashapelayer *linelayer =[cashapelayer layer];

uibezierpath *linepath =[uibezierpath bezierpath];

//線[linepath movetopoint:startpoint];

[linepath addlinetopoint:endpoint];

//將繪製路徑賦值給layer

linelayer.path =linepath.cgpath;

//設定線的顏色

linelayer.strokecolor =[uicolor redcolor].cgcolor;

//設定線頭部型別

linelayer.linecap =kcalinecapsquare;

//設定線寬

linelayer.linewidth = 10

;

//設定線的層級

linelayer.zposition = 251

;

//新增到layer上

[self.layer addsublayer:linelayer];

上下文:

//

獲取上下文

cgcontextref context =uigraphicsgetcurrentcontext();

//上下文移動到畫布點spoint

cgcontextmovetopoint(context, spoint.x, spoint.y);

//給上下文新增線到點epoint

cgcontextaddlinetopoint(context, epoint.x, epoint.y);

//設定顏色

cicolor * bclor =[[cicolor alloc] initwithcolor:edg.begincolor];

cgcontextsetstrokecolor(context, bclor.components);

//也可以

[[uicolor bluecolor] setstroke];//或

cgcontextsetrgbstrokecolor(context, 0.5, 0.5, 0, 1

);//

設定線寬

cgcontextsetlinewidth(context, edg.width);

//設定繪圖方式並繪圖stroke描邊 fill填充

cgcontextdrawpath(context, kcgpathfillstroke);

其他的圖形繪製類似,寫文字功能

layer:

catextlayer * textlayer =[catextlayer layer];

//解決文字不清晰問題

//設定字型大小

textlayer.fontsize = 22;//

設定顯示文字

textlayer.string =name;

//設定文字顏色

textlayer.foregroundcolor =roadcolor.cgcolor;

//設定背景顏色

textlayer.backgroundcolor =[uicolor lightgraycolor].cgcolor;

//設定layer的frame

textlayer.frame =frame;

//新增到layer上

[self.layer addsublayer:textlayer]

上下文:

//

獲取上下文

cgcontextref ctx =uigraphicsgetcurrentcontext();

//設定字型大小

float fontsize =14.0f;/*

這種方式寫出來的文字是反著的,需要對其進行旋轉

*/cgcontextsettextmatrix(content, cgaffinetransformmakescale(1.0, -1.0));

//

設定字型顏色

[[uicolor redcolor] set

];//

字型和字型大小賦值

cgcontextselectfont(ctx, "

helvetica

", fontsize, kcgencodingmacroman);

//設定填充模式

cgcontextsettextdrawingmode(ctx, kcgtextfill);

//寫文字方法

cgcontextshowtextatpoint(ctx, p4.x, p4.y, [strangle utf8string], [strangle length]);

繪製橢圓

//

獲取上下文

cgcontextref con=uigraphicsgetcurrentcontext();

//在規定的矩形區內繪製內切橢圓

cgcontextaddellipseinrect(con, cgrectmake(0, 0, 200, 80

));

//設定填充顏色

cgcontextsetfillcolorwithcolor(con, [uicolor bluecolor].cgcolor);

//繪製

cgcontextfillpath(con);

YUI中一些方法總結

yui extend r s px sx 只繼承prototype中的方法,不繼承建構函式內的私有屬性和私有成員以及共有成員,並且可以為它的子類新增prototype屬性,為建構函式新增私有屬性 r function 該函式被修改 s function 被繼承的建構函式 px object 公共屬性...

C 中一些常見的方法

1.對規則的字串進行處理的bool splitstring string strorigin,string strsplit,vector vct string str strorigin.substr 0,iindex vct string.push back str ilen int stror...

PHP中一些可用的方法

陣列編碼轉換函式 return array in charset原字串編碼 out charset輸出字串編碼 arr傳入的陣列 function array iconv in charset,out charset,arr 二維陣列排序函式 arr輸入的二位陣列 keys需要排序的字段 mode是...