美文网首页
Quartz 2D 绘制直线、虚线

Quartz 2D 绘制直线、虚线

作者: Alerson | 来源:发表于2019-07-23 16:55 被阅读0次

    绘制步骤
    1.获取上下文 : -UIGraphicsGEtCurrentContext()
    2.创建和设置路径 (path)
    -2.1 创建路径
    -2.2 设置路径起点
    -2.3 设置路径终点、内容
    3.添加路径到上下文
    4.设置上下文状态
    5.绘制路径
    6.释放路径

    说明: Quartz 2d 是Core Graphic 框架下的 关于c 语言的 Api 接口,所以后很多东西都是和Core Graphic 公用的。所以很多前缀都是用CG 开头,另外这个文章 写的是路径 所以都会有path 。因为是C语言的 所以都是没有像oc 那样的 创建对象 ,没有星号

    - (void)drawRect:(CGRect)rect {   
    // Drawing code
    //   1.获取上下文   
      CGContextRef contxt = UIGraphicsGetCurrentContext()  ;
    //    2.创建路径 
      CGMutablePathRef path = CGPathCreateMutable() ;
    //    第一个参数是 创建的路径 第二个是 形变 先不管 ,第三四个 参数是 X和 Y   
      CGPathMoveToPoint(path, NULL, 50, 50);  
      CGPathAddLineToPoint(path, NULL, 300, 50);
    //   CGPathAddLineToPoint(path, NULL, 50, 300);   
       CGPathCloseSubpath(path) ;
    //    CGContextMoveToPoint(contxt, 50, 50 );
    //    CGContextAddLineToPoint(contxt, 300, 300) ;
    //    CGContextClosePath(contxt);
    //    3.添加路径  
       CGContextAddPath(contxt, path);
    //    4.添加属性。 颜色跟alpha 同时设置 会使得性能下降   10  和10.0f是有差别的
    //    FillColor  是存在闭合图像的时候 所需要的填充颜色  ;
    //    而StrokeColor  是线条颜色  
       CGContextSetRGBStrokeColor(contxt, 1.0, 0.0, 0.0, 1.0);  
      //画线颜色   
       CGContextSetRGBFillColor(contxt, 0.0, 0.3f, 0.8f, 0.4f);    
    // 填充颜色 
         CGContextSetLineWidth(contxt, 2 );   
         CGContextSetLineCap(contxt, kCGLineCapSquare); 
    // 顶点样式  
    //    kCGLineCapButt,  凹角    
    //    kCGLineCapRound, 圆角    
    //    kCGLineCapSquare。平角    
      CGContextSetLineJoin(contxt, kCGLineJoinBevel);
    //    kCGLineJoinMiter, 尖角度
    //    kCGLineJoinRound, 圆角
    //    kCGLineJoinBevel  平角    
        CGFloat lengths[] = {5 ,10  };
    // lengths 的数组在别等文章说是 先画 5个点 再空10个点,再画5个点 
    //可实际上代码我的效果是实线和空格是一样的宽度, 也就是0-5 是实线,5-10 是虚线,
    另外关于如果有三个数字,又是另一个状态, 还望知道看到这篇文章并且懂得的人 留言解惑
    //    contex 上下文
    //    phase 相位  偏移量
    //    lengthes 数组
    //    count 数组的个数  
        CGContextSetLineDash(contxt, 0, lengths, 2);
    //    5.绘制    
        CGContextDrawPath(contxt, kCGPathStroke);
    //    6.释放对象。因为是c 语言  用creat 或者copy 的 都是需要手动释放   
       CGPathRelease(path) ;
    
    }
    //typedef CF_ENUM (int32_t, CGPathDrawingMode) {
    //    kCGPathFill, 填充
    //    kCGPathEOFill,
    //    kCGPathStroke,  画线
    //    kCGPathFillStroke,  填充加画线
    //    kCGPathEOFillStroke。//
    };
    

    疑惑: // lengths 的数组在别等文章说是 先画 5个点 再空10个点,再画5个点
    //可实际上代码我的效果是实线和空格是一样的宽度, 也就是0-5 是实线,5-10 是虚线,
    另外关于如果有三个数字,又是另一个状态, 还望知道看到这篇文章并且懂得的人 留言解惑;另外就是CGPathDrawingMode 填充状态有几个状态带of 的 ,跟其他的效果一样,是为什么呢:kCGPathFill 和kCGPathEOFill 效果一样,为什么要取不通的名字,或者是又不一样的地方我忽略了。求解惑。

    相关文章

      网友评论

          本文标题:Quartz 2D 绘制直线、虚线

          本文链接:https://www.haomeiwen.com/subject/uacalctx.html