美文网首页
CGPathRef(CGMutablePathRef)相关接口的

CGPathRef(CGMutablePathRef)相关接口的

作者: 拳战攻城师 | 来源:发表于2018-09-11 10:45 被阅读0次

    本文主要介绍通过使用CGPathRef/CGMutablePathRef哪些相关的接口可以绘制一个图形。

    使用CGPathRef画矩形

        double lineWidth = 5;
        //创建矩形区域及矩形区域的路径,
        CGRect rect = CGRectMake(lineWidth, lineWidth, 100, 200);
        CGPathRef path = CGPathCreateWithRoundedRect(rect, 1, 2, nil);
    
        //获取图形上下文并将路径加入上下文
        CGContextRef cr = [[NSGraphicsContext currentContext] graphicsPort];
        CGContextAddPath(cr, path);
        
        //设置线条色、填充色、线条宽度
        CGContextSetRGBStrokeColor(cr, 0, 0, 255, 1); 
        CGContextSetRGBFillColor(cr, 255, 0, 0, 1);
        CGContextSetLineWidth(cr, lineWidth);
        
        //几个绘制函数
        //CGContextFillPath(cr);                        //只填充
        //CGContextDrawPath(cr, kCGPathFill);           //同上
        //CGContextStrokePath(cr);                      //只画线条
        //CGContextDrawPath(cr, kCGPathStroke);         //同上
        
        //绘制线条并对矩形进行填充
        CGContextDrawPath(cr, kCGPathFillStroke);  
    
        //清理
        CGPathRelease(path);
    

    使用CGMutablePathRef画矩形

        double lineWidth = 5;
        //创建矩形区域、路径,将矩形区域加入至路径中
        CGRect rect = CGRectMake(lineWidth, lineWidth, 100, 200);
        CGMutablePathRef path = CGPathCreateMutable();
        CGPathAddRect(path, nil, rect);
        
        //获取图形上下文,并将path加入上下文中
        CGContextRef cr = [[NSGraphicsContext currentContext] graphicsPort];
        CGContextAddPath(cr, path);
        
        //设置线条色、填充色、线条宽度
        CGContextSetRGBStrokeColor(cr, 0, 0, 255, 1);
        CGContextSetRGBFillColor(cr, 255, 0, 0, 1);
        CGContextSetLineWidth(cr, lineWidth);
        
        //绘制
        CGContextDrawPath(cr, kCGPathFillStroke);
        
        //清理
        CGPathRelease(path);
    

    效果如下:

    image.png

    平移、缩放

    //获取初始状态
    CGAffineTransform xf = CGAffineTransformIdentity;
    //x轴平移10,y轴平移20 
    xf = CGAffineTransformTranslate( xf, 10,20); 
    //x轴缩放10倍,y轴缩放20倍。
    xf = CGAffineTransformScale( xf, 10, 20);
    

    由点连线绘制直角三角形(愚蠢的方法)

    //创建三角形
    int count = 100;
    double lineWidth = 3;
    //斜边
    NSPoint *points1 = (NSPoint*)malloc(sizeof(NSPoint)*count);
    for(int i=0; i<count; ++i){
        points1[i] = NSMakePoint(lineWidth+i, 100-i);
    }
    //高
    NSPoint *points2 = (NSPoint*)malloc(sizeof(NSPoint)*count);
    for(int i=0; i<count; ++i){
        points2[i] = NSMakePoint(lineWidth, 100-i);
    }
    //底边
    NSPoint *points3 = (NSPoint*)malloc(sizeof(NSPoint)*count);
    for(int i=0; i<count; ++i){
        points3[i] = NSMakePoint(100-i, lineWidth);
    }
    
    //创建矩形区域、路径,将矩形区域加入至路径中
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathAddLines(path,nil, points1, count);
    CGPathAddLines(path,nil, points2, count);
    CGPathAddLines(path,nil, points3, count);
    
    //获取图形上下文,并将path加入上下文中
    CGContextRef cr = [[NSGraphicsContext currentContext] graphicsPort];
    CGContextAddPath(cr, path);
    
    //设置线条色、填充色、线条宽度
    CGContextSetRGBStrokeColor(cr, 0, 0, 255, 1);
    CGContextSetRGBFillColor(cr, 255, 0, 0, 1);
    CGContextSetLineWidth(cr, lineWidth);
    
    //绘制
    CGContextDrawPath(cr, kCGPathFillStroke);
    
    //清理
    CGPathRelease(path);
    free(points1);
    free(points2);
    free(points3);
    

    通过坐标绘制三角形

    int count = 100;
    double lineWidth = 3;
    
    //创建矩形区域、路径,将矩形区域加入至路径中
    CGMutablePathRef path = CGPathCreateMutable();
    
    //获取图形上下文,并将path加入上下文中
    CGContextRef cr = [[NSGraphicsContext currentContext] graphicsPort];
    CGContextAddPath(cr, path);
    
    //高
    CGContextMoveToPoint(cr,lineWidth,0);
    CGContextAddLineToPoint(cr,lineWidth,count);
    
    //斜边
    CGContextMoveToPoint(cr,lineWidth,count);
    CGContextAddLineToPoint(cr,count,0);
    
    //底边
    CGContextMoveToPoint(cr,count,0);
    CGContextAddLineToPoint(cr,lineWidth,0);
    
    //设置线条色、填充色、线条宽度
    CGContextSetRGBStrokeColor(cr, 0, 0, 255, 1);
    CGContextSetRGBFillColor(cr, 255, 0, 0, 1);
    CGContextSetLineWidth(cr, lineWidth);
    
    //绘制
    CGContextDrawPath(cr, kCGPathFillStroke);
    
    //清理
    CGPathRelease(path);
    

    效果如下:

    image.png

    相关文章

      网友评论

          本文标题:CGPathRef(CGMutablePathRef)相关接口的

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