自定义地图路径线(Custom map path line)

2019-08-16 16:55发布

我在与画线用笔划在地图上的麻烦。 (内部颜色和颜色外)我beleive我在正确的道路上,并子类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+

Answer 1:

行程第一路径(与道路)与颜色1,则笔划宽度和颜色与道路用×0.6颜色2,和中风再次更改为较细的线。



Answer 2:

好吧,我管理的基础上马修的建议,但有一些调整,以弄清楚......

基本上我创建使用描边路径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);

    }


文章来源: Custom map path line