从另一个path的线宽轮廓生成一个CGPath

我可能不会用最好的方式解释这个,所以请忍受我。

我有一个在MKMapView对象之上绘制的CGPath:

我能够实现这一目标的方法是为较暗的蓝线创build一个CGPath,然后创build该path的副本,然后用半透明的蓝色笔触较厚的版本。 以下是我目前使用的代码:

// 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。 下面是另一张屏幕截图,显示我想要的这个伪path(手绘为红色):

这怎么可能?

简单:只需使用CGPathCreateCopyByStrokingPath 。 通过一个宽的线宽,和一个kCGLineCapRound的上限。

你可以画两个斯托克斯。

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

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