从另一个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]);