轉自:http://blog.sina.com.cn/s/blog_79a120e501018c2n.html
UIView 的方法:
- (void)drawRect:(CGRect)rect
擷取當前context:
CGContextRef context =UIGraphicsGetCurrentContext();
擷取當前bounds的起點和size:
self.bounds.origin
self.bounds.size
設定畫圖的線寬和填充線的顏色:
CGContextSetLineWidth(context, 5.0);
[[UIColor blueColor]setStroke];
畫圖另外調用方法:
在用context之前需要push下,最後再pop,這樣就不會破壞外面的context,隨便我在裡面做什麼。
UIGraphicsPushContext(context);
CGContextBeginPath(context);
CGContextAddArc(context, p.x,p.y, radius, 0, 2*M_PI,YES);
//CGContextAddCurveToPoint(context,mouthCP1.x, mouthCP1.y,mouthCP2.x, mouthCP2.y,//mouthEnd.x, mouthEnd.y);都是一樣的套路。。
CGContextStrokePath(context);
UIGraphicsPopContext();
繼承uiview,將uiview變成子view。UIBezierPath類畫圖。是用矩形座標畫圖的
- (void)drawRect:(CGRect)rect
{
//矩形畫圖地區
CGRect aRectangle = CGRectMake(0.0,
0.0, 40.0, 40.0);
//定義一個矩形路徑
UIBezierPath *path =[UIBezierPath bezierPathWithRect:aRectangle];
//將矩形路徑畫出來
[pathstroke];
//在地區中畫一個橢圓
path = [UIBezierPathbezierPathWithOvalInRect:aRectangle];
//橢圓填充
[pathfill];
//定義一個開始路徑
UIBezierPath *startPath= [UIBezierPath bezierPath];
//開始畫五角星
[startPathmoveToPoint:CGPointMake(40.0,
0.0)];
[startPath addLineToPoint:CGPointMake(30.0,
30.0)];
[startPath addLineToPoint:CGPointMake(0.0,
30.0)];
[startPath addLineToPoint:CGPointMake(20.0,
50.0)];
[startPath addLineToPoint:CGPointMake(10.0,
80.0)];
[startPath addLineToPoint:CGPointMake(40.0,
60.0)];
[startPath addLineToPoint:CGPointMake(70.0,
80.0)];
[startPath addLineToPoint:CGPointMake(60.0,
50.0)];
[startPath addLineToPoint:CGPointMake(80.0,
30.0)];
[startPath addLineToPoint:CGPointMake(50.0,
30.0)];
[startPathclosePath];
//擷取當前環境
CGContextRef context= UIGraphicsGetCurrentContext();
//儲存當前環境,便於以後恢複
CGContextSaveGState(context);
//將座標的起點變成(100,100)
CGContextTranslateCTM(context,
100, 100);
//將當前的顏色變成黃色
UIColor* fillColor =[UIColor yellowColor];
[fillColorsetFill];
//五角星填充為黃色
[startPathfill];
//將座標起點變成(100,100)開始,注意:這裡是當前的(100,100)的相對位移,所以相對整個view是(200,200)
CGContextTranslateCTM(context,
100, 100);
//將座標旋轉45度
CGContextRotateCTM(context,
3.14/4);
//將使用中色彩變成綠色
fillColor =[UIColor
greenColor];
[fillColorsetFill];
//將五角星的輪廓畫上顏色
[startPathstroke];
//五角星填充
[startPathfill];
//恢複context,當然,是恢複成之前儲存的那個
CGContextRestoreGState(context);
//將當前context儲存
CGContextSaveGState(context);
CGContextTranslateCTM(context,
50, 250);
[startPathfill];
CGContextRestoreGState(context);
}