Quartz 2D 绘制直线、虚线

绘制步骤
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 绘制直线、虚线)