自定义地图路径线

我在地图上画一条线有麻烦。 (内部颜色和外部颜色)我相信我在正确的道路上并且已经将mkOverlayView子类化以覆盖绘图(需要填充道路大小)所以在drawMapRect内…

CGFloat lineWidth = MKRoadWidthAtZoomScale(zoomScale); MKMapRect clipRect = MKMapRectInset(mapRect, -lineWidth, -lineWidth); ... CGContextAddPath(context, path); CGContextSetStrokeColorWithColor(context, line.color.CGColor); CGContextSetLineJoin(context, kCGLineJoinRound); CGContextSetLineCap(context, kCGLineCapRound); CGContextSetLineWidth(context, lineWidth); CGContextSetAlpha(context, 0.4f); CGContextStrokePath(context); CGPathRelease(path); 

我不知道如何添加中风。 任何帮助将不胜感激。 xcode 4.6 / ios 6.0+

在此处输入图像描述

先用颜色1描绘一条路径(道路),然后将描边宽度和颜色改为更细的线条,道路颜色为2,颜色为0.6,再次划线。

好吧,我根据Mathew的建议设法弄明白了,但稍作调整……

在此处输入图像描述

基本上我使用CGPathCreateCopyByStrokingPath创建了一个描边路径,并使笔划比基色稍暗。 然后使用路径和描边创建了一个transparentLayer ,使用了混合模式kCGBlendModeDestinationAtop并且在此时仅绘制了一个填充的另一个路径。 我不确定这是否是最好的方法,但似乎运作良好。

 CGPathRef newpath = CGPathCreateCopyByStrokingPath(path, NULL, lineWidth, kCGLineCapRound, kCGLineJoinMiter, 0.0); CGContextAddPath(context, newpath); CGContextSetStrokeColorWithColor(context, line.color.CGColor); CGContextSetFillColorWithColor(context, line.color.CGColor); CGContextSetLineWidth(context, lineWidth * 0.3); CGContextSetAlpha(context, 0.8f); CGContextBeginTransparencyLayer (context, NULL); CGContextStrokePath(context); CGContextBeginPath(context); CGContextAddPath(context, newpath); CGContextFillPath(context); CGContextEndTransparencyLayer(context); CGContextSetBlendMode(context, kCGBlendModeDestinationAtop); CGContextSetAlpha(context, 0.3f); CGContextBeginPath(context); CGContextAddPath(context, newpath); CGContextFillPath(context); CGPathRelease(path); CGPathRelease(newpath); 

编辑这是一个基于AlexWien方法的简单解决方案 在此处输入图像描述

  if (path != nil) { CGPathRef path2 = CGPathCreateCopy(path); CGFloat hue; CGFloat saturation; CGFloat brightness; CGFloat alpha; [line.color getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha]; UIColor *c2 =[UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:0.4]; CGContextAddPath(context, path); CGContextSetStrokeColorWithColor(context, c2.CGColor); CGContextSetLineJoin(context, kCGLineJoinRound); CGContextSetLineCap(context, kCGLineCapRound); CGContextSetLineWidth(context, lineWidth); CGContextStrokePath(context); CGPathRelease(path); CGContextSetBlendMode(context, kCGBlendModeSourceAtop); CGContextAddPath(context, path2); CGContextSetRGBStrokeColor(context, 1.0f, 1.0f, 1.0f, 0.3f); CGContextSetLineJoin(context, kCGLineJoinRound); CGContextSetLineCap(context, kCGLineCapRound); CGContextSetLineWidth(context, lineWidth/2.0f); CGContextStrokePath(context); CGPathRelease(path2); }