渲染的方式主要分为两种一种是描边一种是填充,其实就是一个是空心,一个是实心的区别,具体看代码这是C的方式

//1、获取当前上下文
    CGContextRef ctx=UIGraphicsGetCurrentContext();
    
    //2、拼接路径,同时把路径添加到上下文当中
    //画个三角形
    CGContextMoveToPoint(ctx, 50, 50);
    CGContextAddLineToPoint(ctx, 100, 100);
    CGContextAddLineToPoint(ctx, 150, 50);
    //这个是画最后一条线使它回到起点,也可以直接使用关闭路径
    //CGContextAddLineToPoint(ctx, 50, 50);
    CGContextClosePath(ctx);
    //3、描边渲染
    //CGContextStrokePath(ctx);
    //我们也可以使用填充渲染
    CGContextFillPath(ctx);



对于描边渲染我们也可以用这个

CGContextDrawPath(ctx, kCGPathStroke);

对于填充其实也是一样的

CGContextDrawPath(ctx, kCGPathFill);

如果你想既填充又描边就要调用下面的渲染方法

CGContextDrawPath(ctx, kCGPathFillStroke);

更改描边和填充的颜色为不同的颜色其实只要实现下面两个方法就可以了


[[UIColor blueColor]setFill];
[[UIColor lightGrayColor]setStroke];

OC的方式实现上面的效果

//1、获取路径对象
    UIBezierPath * path=[UIBezierPath bezierPath];
    
    //2、拼接路径
    [path moveToPoint:CGPointMake(50, 50)];
    [path addLineToPoint:CGPointMake(100, 100)];
    [path addLineToPoint:CGPointMake(150, 50)];
    //关闭路径
    [path closePath];
    
    //设置填充颜色
    [[UIColor blueColor]setFill];
    //设置描边的颜色
    [[UIColor greenColor]setStroke];
    
    //既描边又渲染就两个都写
    [path fill];
    [path stroke];


iOS zeropadding 填充 填充苹果_iOS zeropadding 填充


这里介绍下CGContextDrawPath(ctx, kCGPathEOFill);的第二个参数

CGPathDrawingMode是填充方式,枚举类型
    kCGPathFill:只有填充(非零缠绕数填充就是默认的填充模式,就是从多边形的区域范围内找任意一个点,当多边形的边是左往右穿过射线的话过去就+1,从右往左穿过射线就-1,如果最后为0,就不填充,否则就填充),不绘制边框,简单的画个图什么是从左往右,什么是从右往左,内部的点都是不填充的,环绕数都为0

iOS zeropadding 填充 填充苹果_set方法_02

    kCGPathEOFill:奇偶规则填充(被覆盖过奇数点的填充,被覆盖过偶数点的不填充) 就比如说从任意位置p作一条射线,若与该射线相交的多边形边的数目为奇数,则p是在多边形内,就去填充,否则就不填充。
    kCGPathStroke:只有边框
    kCGPathFillStroke:既有边框又有填充
    kCGPathEOFillStroke:奇偶填充并绘制边框

UIColor还有一个set方法就是会同时设置描边和填充的颜色。

OC中实现奇偶填充规则其实就是获取个路径对象path然后设置下path.usesEvenOddFillRule=YES;就可以了