Quartz2D常用方法的简单使用

线段的绘制

方式一

    // 1.获取图形上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 2.描述路径
    // 创建路径
    CGMutablePathRef path = CGPathCreateMutable();
    
    // 设置起点
    // path:给哪个路径设置起点
    CGPathMoveToPoint(path, NULL, 50, 50);
    
    // 添加一根线到某个点
    CGPathAddLineToPoint(path, NULL, 200, 200);
    
    // 3.把路径添加到上下文
    CGContextAddPath(ctx, path);
    
    // 4.渲染上下文
    CGContextStrokePath(ctx);

方式二

    //1 获取上下文
   CGContextRef context = UIGraphicsGetCurrentContext();
    
    //2 创建一个绘制的路径
    CGMutablePathRef path = CGPathCreateMutable();
    
    //画线
    //(1)设置起始点
    CGPathMoveToPoint(path, NULL, 50, 50);
    
    //(2)设置目标点
    CGPathAddLineToPoint(path, NULL, 200, 200);
    
    CGPathAddLineToPoint(path, NULL, 50, 200);
    //关闭路径和注释这句实现了一样的效果
    //    CGPathAddLineToPoint(path, NULL, 50, 50);
    
    //关闭路径(将路径封闭起来)
    CGPathCloseSubpath(path);
    
    //3 将路径添加到上下文
    CGContextAddPath(context, path);
    
    
    //4 设置上下文的属性
    //设置填充颜色
    CGContextSetRGBFillColor(context, 250/255.0, 200/255.0, 50/255.0, 1.0);
    
    //设置线条颜色
    CGContextSetRGBStrokeColor(context, 65/255.0, 170/255.0, 50/255.0, 1.0);
    //设置线条宽度
    CGContextSetLineWidth(context, 30);
    
    //设置线条转折点的样式
    CGContextSetLineJoin(context, kCGLineJoinRound);
    
    
    //5 渲染上下文
    /*渲染模式:
     kCGPathFill:填充(实心)
     kCGPathStroke:只画线(空心)
     kCGPathFillStroke:即画线又填充
     */
    //使用了设置属性进行渲染
    CGContextDrawPath(context, kCGPathFillStroke);
    
    
    //6 释放路径
    CGPathRelease(path);

方式三

    // 获取上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 描述路径
    // 设置起点
    CGContextMoveToPoint(ctx, 50, 50);
    
    CGContextAddLineToPoint(ctx, 200, 200);
    
    // 渲染上下文
    CGContextStrokePath(ctx);

方式四

    //1 获取上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    //2 添加多条线
    CGPoint p0 = {50,50};
    CGPoint p1 = {200,200};
    CGPoint p2= {50,200};
    CGPoint p3 = {50,50};
    CGPoint points[] = {p0,p1,p2,p3};
    
    CGContextAddLines(context, points, 4);
    
    
    //3 设置属性
    //---UIKit提供的设置颜色的方法--------
    //设置线条颜色
    [[UIColor redColor] setStroke];
    //设置填充颜色
    [[UIColor blueColor]setFill];
    
    //4 绘制路径
    CGContextDrawPath(context, kCGPathFillStroke);

方式五

    
    // 贝瑟尔路径
    // 创建路径
    UIBezierPath *path = [UIBezierPath bezierPath];
    
    // 设置起点
    [path moveToPoint:CGPointMake(50, 50)];
    
    // 添加一根线到某个点
    [path addLineToPoint:CGPointMake(200, 200)];
    
    // 绘制路径
    [path stroke];

方式六

    //画两根线段
    //创建贝瑟尔路径
    UIBezierPath *path = [UIBezierPath bezierPath];
    //起点
    [path moveToPoint:CGPointMake(50, 50)];
    //终点
    [path addLineToPoint:CGPointMake(200, 200)];
    
    //线宽
    path.lineWidth = 10;
    //设置线条颜色和背景填充颜色均为红色
    [[UIColor redColor] set];
    
    [path stroke];
    
    UIBezierPath *path1 = [UIBezierPath bezierPath];
    
    [path1 moveToPoint:CGPointMake(0, 0)];
    
    [path1 addLineToPoint:CGPointMake(30, 60)];
    [[UIColor greenColor] set];
    
    path1.lineWidth = 3;
    
    [path1 stroke];

曲线的绘制

方式一

     //S型曲线
    //1 设置起始点
    CGContextMoveToPoint(context, 20, 200);
    
    //2 画贝塞尔曲线
    //(1) 3个点
    /*
    CGContextAddCurveToPoint(<#CGContextRef  _Nullable c#>, cp1x, cp1y, cp2x, cp2y, x, y)
     <#CGContextRef  _Nullable c#>:上下文
     cp1x cp1y: 第一条切线的终点
     cp2x cp2y: 第二条切线的起点
     x  y: 第二条切线的终点
     */
  CGContextAddCurveToPoint(context, 100, 20, 200, 300, 300, 50);
    //3设置属性
    [[UIColor redColor] setStroke];
  
    //4 渲染
   CGContextDrawPath(context, kCGPathStroke);

方式二

    //抛物线曲线
    // 获取上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 描述路径
    // 设置起点
    CGContextMoveToPoint(ctx, 50, 50);
    
    // cpx:控制点(这里是150,20)
    CGContextAddQuadCurveToPoint(ctx, 150, 20, 250, 50);
    
    [[UIColor whiteColor]setStroke];
    
    // 渲染上下文
    CGContextStrokePath(ctx);

矩形绘制

方式一


    //----------第一种:core Graphics-----------
    //1 获取上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    //2 添加矩形
   CGRect rect = CGRectMake(40, 40, 100, 200);
    CGContextAddRect(context, rect);
    
    //3 设置属性
    [[UIColor redColor]setStroke];
    [[UIColor orangeColor]setFill];
    
    //4 绘制
    CGContextDrawPath(context, kCGPathFillStroke);

方式二

    
    //----------第二种:UIKit- 提供绘制矩形的函数  (已经封装好的)----------
    [[UIColor redColor]setStroke];
    [[UIColor orangeColor]setFill];
    
    CGRect rect = CGRectMake(40, 40, 100, 200);
    //绘制线条矩形(空心)
  //    UIRectFrame(rect);
    
    //绘制填充的矩形(实心)
    UIRectFill(rect);

方式三

    // 圆角矩形
   UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(20, 20, 200, 200) cornerRadius:8];
    //注意:如果矩形为正方形,cornerRadius的值为边长的一半,就变成了圆形

    //设置线条的颜色
    [[UIColor whiteColor]setStroke];
    //设置填充颜色
    [[UIColor whiteColor]setFill];
    //渲染
    [path stroke];
    [path fill];
    

绘制圆弧、圆(椭圆)、扇形

    // 绘制圆弧
    /**
     *
     *
     *  @param context      上下文
     *  @param x#>          圆的中心点坐标x description#>
     *  @param y#>          圆的中心点坐标y description#>
     *  @param radius#>     圆的半径 description#>
     *  @param startAngle#> 开始的角度 description#>
     *  @param endAngle#>   结束的角度 description#>
     *  @param clockwise#>  画的方向 0 顺时针  1 逆时针
     */
    CGContextAddArc(context, 160, 100, 100, 0, M_PI_4, 0);
    
    //设置属性
    [[UIColor redColor]setStroke];

    //绘制
    CGContextDrawPath(context, kCGPathStroke);
    
    // 绘制扇形
    CGPoint center = CGPointMake(125, 125);
     UIBezierPath *path = [UIBezierPath 

    // Center:圆心
    // startAngle:弧度
    // clockwise:YES:顺时针 NO:逆时针
    bezierPathWithArcCenter:center radius:100 startAngle:0 endAngle:M_PI_2 clockwise:YES];
    
    // 添加一根线到圆心
    [path addLineToPoint:center];
    
    // 封闭路径,关闭路径:从路径的终点到起点
    [path closePath];
    //渲染
   [path stroke];
    

    
    
     //绘制内切圆(椭圆)

    CGRect rect = CGRectMake(50, 50, 200, 100);
    //注意:如果为正方形,则画出的是圆形;为长方形,则为椭圆
    
    //设置属性
    [[UIColor blackColor]setStroke];
    [[UIColor orangeColor]setFill];
    
    //绘制线条矩形
    //UIRectFrame(rect);
    
    //根据矩形绘制的椭圆(我这里画的是椭圆)
    CGContextAddEllipseInRect(context, rect);
    
    //绘制
    CGContextDrawPath(context, kCGPathFillStroke);

提示:绘制弧、扇形的方法可以实现本节的所有图形哦

绘制图片

方式一

    UIImage *image = [UIImage imageNamed:@"1.jpg"];
    
    //一 UIKit提供的方法
    //1 指定一个点来绘制图片 (锚点)
    [image drawAtPoint:CGPointMake(50, 50)];
    
    //2 指定一个矩形范围来绘制 (拉伸填充)
  //    [image drawInRect:CGRectMake(0, 0, 300, 200)];
    
    //3 指定一个矩形范围平铺绘制
  //    [image drawAsPatternInRect:CGRectMake(0, 0, 300, 200)];

方式二

    
    
    //二 core graphics 提供的函数

    CGContextRef context = UIGraphicsGetCurrentContext();
    UIImage *image = [UIImage imageNamed:@"1.jpg"];
    //1 保存上下文状态
    CGContextSaveGState(context);
    
    //2 切换坐标系
    Quartz 2D的坐标系(与数学的二维坐标系一样)----->UIKit的坐标系
    //(1)向上平移一个高度
    CGContextTranslateCTM(context, 0, 200);
    //(2)改变y轴的方向 (缩放y的坐标,使其方向反转)
    CGContextScaleCTM(context, 1, -1);
    
    
    //3 图片绘制
    CGContextDrawImage(context, CGRectMake(0, 0, 300, 200), image.CGImage);
    
    //4 恢复到之前保存的上下文状态
    CGContextRestoreGState(context);

绘制文字

    // 绘制文字
    
    NSString *str = @"asfdsfsdf";
    
    
    // 文字的起点
    // Attributes:文本属性

    NSMutableDictionary *textDict = [NSMutableDictionary dictionary];

    // 设置文字颜色
    textDict[NSForegroundColorAttributeName] = [UIColor redColor];

    // 设置文字字体
    textDict[NSFontAttributeName] = [UIFont systemFontOfSize:30];

    // 设置文字的空心颜色和宽度

    textDict[NSStrokeWidthAttributeName] = @3;

    textDict[NSStrokeColorAttributeName] = [UIColor yellowColor];

    // 创建阴影对象
    NSShadow *shadow = [[NSShadow alloc] init];
    shadow.shadowColor = [UIColor greenColor];
    shadow.shadowOffset = CGSizeMake(4, 4);
    shadow.shadowBlurRadius = 3;
    textDict[NSShadowAttributeName] = shadow;

    // 富文本:给普通的文字添加颜色,字体大小
    [str drawAtPoint:CGPointZero withAttributes:textDict];
    }

你可能感兴趣的:(Quartz2D常用方法的简单使用)