绘图的步骤: 1.获取上下文 2.创建路径(描述路径) 3.把路径添加到上下文 4.渲染上下文
通常在这个方法里面绘制图形
为什么要再drawRect里面绘图,只有在这个方法里面才能获取到跟View的layer相关联的图形上下文
什么时候调用:当这个View要显示的时候才会调用drawRect绘制图形,
注意:rect是当前控件的bounds
使用传统的方法画线
- (void)drawRect:(CGRect)rect
{
// 获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 描述路径
// 设置起点
CGContextMoveToPoint(ctx, 0, 0);
// cpx:控制点的x
CGContextAddQuadCurveToPoint(ctx, 0, 0, self.bounds.size.width, self.bounds.size.height);
// 渲染上下文
CGContextStrokePath(ctx);
}
- 利用贝塞尔曲线画线
- (void)method2
{
// 画从一个点到另外一个点的直线
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(0, 0)];
[path addLineToPoint:CGPointMake(self.bounds.size.width, self.bounds.size.height)];
path.lineWidth = 2; // 线条的宽度
[[UIColor redColor] set];
[path stroke];
UIBezierPath *path2 = [UIBezierPath bezierPath];
[path2 moveToPoint:CGPointMake(self.bounds.size.width, 0)];
[path2 addLineToPoint:CGPointMake(0, self.bounds.size.height)];
path2.lineWidth = 2; // 线条的宽度
[[UIColor redColor] set];
[path2 stroke];
}
- 利用贝塞尔曲线画圆
- (void)method3
{
// 利用贝塞尔曲线画圆
// 创建贝瑟尔路径
CGPoint center = CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height * 0.5);
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:100 startAngle:0 endAngle:M_PI*2 clockwise:YES];
[[UIColor redColor] set];
path.lineWidth = 2;
[path stroke];
}
- 利用贝塞尔曲线画圆弧
- (void)method4
{
// 画圆弧
CGPoint center = CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height * 0.5);
CGFloat radius = self.bounds.size.height * 0.5;
CGFloat startA = 0;
CGFloat endA = M_PI_4;
// 画扇形
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES];
// 回到center点
[path addLineToPoint:center];
[[UIColor redColor] set];
// [fill 底层会调用stroke];
[path stroke];
// 在画一条直线,把这个圆弧封闭住
UIBezierPath *path2 = [UIBezierPath bezierPath];
[path2 moveToPoint:center];
[path2 addLineToPoint:CGPointMake(center.x+radius, center.y)];
path2.lineWidth = 1; // 线条的宽度
[[UIColor redColor] set];
[path2 stroke];
}