Quartz画图学习

  • 绘图的步骤: 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];
}

注意:以上所有的方法都是在drawInRect方法中调用的

你可能感兴趣的:(Quartz画图学习)