画图入口
关于画图的方法必须写在这个方法中
frame被确定后,就会执行drawRect方法
执行
[self setNeedsDisplay];
方法时会重新调用drawRect方法
- (void)drawRect:(CGRect)rect {
// Drawing code
}
图形定制
扇形图
- (void)drawPieChart {
NSMutableArray *array =[NSMutableArray array];
for (int i = 0; i < arc4random_uniform(6) + 1; i++) {
[array addObject:@(RANDOMNUM)];
}
//用来存储所有值的总和
CGFloat totalF = 0.0;
//计算总和
for (NSNumber *num in array) {
totalF += num.floatValue;
}
//中心点坐标
CGPoint centerP = CGPointMake(130, 140);
//半径
CGFloat radiusF = 99.0;
//起点坐标
CGFloat startF = 0.0;
//终点坐标
CGFloat endF = 0.0;
for (int i = 0; i < array.count; i++) {
CGFloat currF = [array[i] floatValue];
//所占比例--度数大小
CGFloat angleF = currF / (totalF*1.0) * M_PI * 2;
startF = endF;
endF = angleF + startF;
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:centerP radius:radiusF startAngle:startF endAngle:endF clockwise:YES];//clockwise :是否顺时针
//增加一条线段到中心点
[path addLineToPoint:centerP];
//关闭路径,组成扇形
[path closePath];
//颜色
[RANDOMCOLOR set];
[path fill];
}
}
虚线
- (void)drawDash {
//1.创建上下文
CGContextRef ref = UIGraphicsGetCurrentContext();
//2.创建路径
UIBezierPath *path = [UIBezierPath bezierPath];
//3.增加起点
[path moveToPoint:CGPointZero];
//4.增加一条线段到某个点
[path addLineToPoint:CGPointMake(99, 99)];
//5.颜色
[[UIColor redColor] set];
//6.线宽
CGContextSetLineWidth(ref, 4);
//6+.虚线
/**
* lengths[] = {4, 2}
* 原理: 实线-4 空白-2 实线-4 空白-2
* lengths[] = {4, 2, 3}
* 原理: 实线-4 空白-2 实线-3 空白-4 实线-2 空白-3
* 先实线后空白,实线和空白的长度为数组的循环引用
*/
CGFloat lengths[] = {4, 2};//因为CGContextSetLineDash方法用到的数组为C语言中的数组,所以此处数组用此种格式
CGContextSetLineDash(ref, 0, lengths, 2);//2为lengths的长度
//7.将路径添加到上下文
CGContextAddPath(ref, path.CGPath);
//8.渲染
// CGContextFillPath(ref);//fill
// CGContextStrokePath(ref);//stroke
CGContextDrawPath(ref, kCGPathFillStroke);//stroke + fill
}
椭圆(圆)
- (void)drawOval {
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(88, 60, 99, 99)];
/**
* set = setFill + setStroke
*/
//边框
[[UIColor redColor] setStroke];
//填充
[[UIColor yellowColor] setFill];
//线宽
path.lineWidth = 5;
//绘制
[path fill];//fill表示填充
[path stroke];//stroke表示绘制边框
}
三角形
- (void)drawTriangle {
//创建贝塞尔曲线类(路径)
UIBezierPath *path = [UIBezierPath bezierPath];
//起点坐标
[path moveToPoint:CGPointMake(20, 80)];
//增加一条线段到某个点
[path addLineToPoint:CGPointMake(220, 280)];
[path addLineToPoint:CGPointMake(230, 30)];
//将路径闭合,形成三角形
[path closePath];
//设置线段的颜色
[[UIColor redColor] set];
//设置线宽
path.lineWidth = 4;
//绘制
[path stroke];
}