3

地図上にストロークで線を引くのに問題があります。(内側の色と外側の色)私は正しい道を進んでいると信じており、図面をオーバーライドするために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+

ここに画像の説明を入力してください

4

2 に答える 2

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);

    }
于 2013-02-01T08:28:32.630 に答える
2

最初に色1のパス(道路)をストロークし、次にストロークの幅と色を色2の* 0.6の道路の細い線に変更して、もう一度ストロークします。

于 2013-01-31T22:40:38.003 に答える