1

我可能没有以最好的方式解释这一点,所以请多多包涵。

我所拥有的是在 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。这是另一个屏幕截图,显示了我想要的伪路径(手绘为红色):

这怎么可能?

4

2 回答 2

4

简单:只需使用CGPathCreateCopyByStrokingPath. 通过宽线宽和kCGLineCapRound.

于 2013-05-14T16:34:19.810 回答
0

你可以画两个斯托克斯。

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

CGContextSetBlendMode(context, kCGBlendModeCopy);
CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);
于 2014-06-28T17:06:26.737 回答