任何的视图都集成自UIView,所有的控件都集成自UIController。
这里粗浅的记录一下继承自UIView的方法
-(void)drawRect:(CGRect)rect
也就是QuartzCore画图。
总共分三步:
1.获得图形上下文
CGContextRef context = UIGraphicsGetCurrentContext();
2.画图(此间比较详细待后面讲)
3.显示到VIew
显示的方式有几种(填充内部,只画边框,既有边框也填充内部(限于闭合路径))
CGContextStrokePath(context);
CGContextFillPath(context);
CGContextDrawPath(context, kCGPathFillStroke);
下面详细说画图:
在说画图前,有一些属性是可共用的。例如颜色和横线的宽度等:
<颜色>
CGContextSetRGBStrokeColor(context, 1, 0, 0, 1);//边框颜色
CGContextSetRGBFillColor(context, 1, 0, 0, 1);//填充颜色
<画线>
CGContextSetLineWidth(context, 20.f);//横线宽度
<横线头尾部样式>
CGContextSetLineCap(context, kCGLineCapRound);//样式
将前面的属性设置好后,我们开始画。
1.画线类
<1>两点定一条线
//设置起点
CGContextMoveToPoint(context, 10, 10);
//画线
CGContextAddLineToPoint(context, 100, 100);
<2>有转点的线
//设置线段转折点的样式
CGContextSetLineJoin(context, kCGLineJoinRound);
//画线
CGContextMoveToPoint(context, 100, 120);
CGContextAddLineToPoint(context, 150, 120);
CGContextAddLineToPoint(context, 150, 180);
<3>通过设置多个点来画折线
CGPoint apoint[3];
apoint[0] = CGPointMake(10, 10);
apoint[1] = CGPointMake(50, 50);
apoint[2] = CGPointMake(100, 200);
CGContextAddLines(context, apoint, 3);
2.画四边形
CGContextAddRect(context, CGRectMake(10, 10, 120, 180));
1.只画边框
将颜色的设置和显示到View的方式统一设置为Stroke类型
2.只填充
将颜色的设置和显示到View的方式统一设置为Fill类型
3.既有边框也有填充
设置两边颜色,分别为Stroke和Fill各设置一种颜色
而显示View时采用CGContextDrawPath(context, kCGPathFillStroke);方法提交即可
3.画三角形
//绘制三角形
CGContextMoveToPoint(context, 0, 0);
CGContextAddLineToPoint(context, 100, 100);
CGContextAddLineToPoint(context, 150, 100);
//关闭路径,(连接起点和最后一个点)
CGContextClosePath(context);
同样在边框和填充上,参照画四边行的方法即可。
4.画圆
//2.绘制图形
CGContextAddEllipseInRect(context, CGRectMake(50, 50, 100, 100));
实际上这是一个画椭圆的方法,但是在第二个Rect的参数上,当width和height相等时,就成了一个圆。
同样在边框和填充上,参照画四边行的方法即可。
5.画圆弧
<1>CGContextAddArc(context, 100, 100, 50, arc(0), arc(90), 0);
参数由左至右分别是,图形上下文、圆心x、圆心y、半径、起始弧度、结束弧度、圆弧伸展的方向(0为顺时针,1为逆时针)
为了方便使用,计算公式为:
//求弧度
CGFloat arc(CGFloat angle){
return angle * (M_PI / 180);
}
<2>由起始点、结束点分别与中间节点连线,同时以半径切过这两边则确定一段圆弧
// CGContextMoveToPoint(context, 100, 100);
// CGContextAddArcToPoint(context, 150, 100, 150, 150, 50);
6.画文字
NSString str = @“JohnsonChou";
NSMutableDictionary attributes = [NSMutableDictionary dictionary];
attributes[NSFontAttributeName] = [UIFont systemFontOfSize:20];//设置文字大小
attributes[NSForegroundColorAttributeName] = [UIColor purpleColor];
[str drawInRect:CGRectMake(100, 100, 100, 30) withAttributes:attributes];
7.画图
//1.取得图片
UIImage *img = [UIImage imageNamed:@"1.jpg”];
//2.画
[img drawAtPoint:CGPointMake(50, 50)];//设置图片中心点
[img drawInRect:CGRectMake(0,0,300,300)];//充斥Rect
[img drawAsPatternInRect:CGRectMake(0, 0, 300, 300)];//原图铺满Rect
8.画贝塞尔曲线
//起点
CGContextMoveToPoint(context, 10, 10);
//2个控制点
CGContextAddCurveToPoint(context, 120, 100, 180, 50, 190, 190);
//1个控制点
// CGContextAddQuadCurveToPoint(context, 150, 200, 200, 100);
补充一点,若是希望通过某些方法来多次画图的话,可以在需要重新画图的地方调用[self setNeedsDisplay];方法来重新画图。