从另一条路径的线宽轮廓生成CGPath

时间:2013-05-14 15:48:44

标签: ios core-graphics cgpath

我可能不会以最好的方式解释这个问题,所以请耐心等待。

我所拥有的是在MKMapView对象上绘制的CGPath:

我能够实现此目的的方法是为较深的蓝线创建一个CGPath,然后创建该路径的副本,然后使用半透明的蓝色描边较厚的版本。这是我目前正在使用的代码:

    // set the shadow around the path line
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGContextSetRGBStrokeColor(context, 0.0f, 0.0f, 0.0f, 0.0f);
    CGContextSetRGBFillColor(context, 0.0f, 0.0f, 1.0f, 0.4f);
    CGPathRef shadowPath = CGPathCreateCopyByStrokingPath(self.path.CGPath, NULL, 80.0f, kCGLineCapRound, kCGLineJoinRound, 0.0f);
    CGContextBeginPath(context);
    CGContextAddPath(context, shadowPath);
    CGContextDrawPath(context, kCGPathFillStroke);
    CGContextRestoreGState(context);
    CGPathRelease(shadowPath);

工作得很好,到目前为止没有错。

然而,我想要做的是获得一个更厚的半透明蓝色区域轮廓的CGPathRef。这是另一个屏幕截图,显示了我想要的伪路径(手绘红色):

这怎么可能?

2 个答案:

答案 0 :(得分:4)

简单:只需使用CGPathCreateCopyByStrokingPath即可。传递宽线宽,上限为kCGLineCapRound

答案 1 :(得分:0)

你可以画两次。

宽度为n(n为轮廓宽度)和黑色的一个笔划。 然后使用橡皮擦模式在第一个笔划上绘制另一个笔划:

CGContextSetBlendMode(context, kCGBlendModeCopy);
CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);