1

これを可能な限り最善の方法で説明していない可能性がありますので、ご容赦ください。

私が持っているのは、MKMapView オブジェクトの上に描画された CGPath です。

これを実現する方法は、濃い青色の線の CGPath を作成し、そのパスのコピーを作成してから、そのパスの太いバージョンを半透明の青色でストロークすることです。私が現在これに使用しているコードは次のとおりです。

    // 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 を取得することです。これは、これから必要な疑似パスを示す別のスクリーンショットです (赤で描かれた手):

これはどのように可能ですか?

4

2 に答える 2

0

あなたは2つのストロークを描くことができます。

幅 n (n はアウトラインの幅) と黒色の 1 つのストローク。次に、消しゴムモードで、最初のストロークの上に別のストロークが描画されます。

CGContextSetBlendMode(context, kCGBlendModeCopy);
CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);
于 2014-06-28T17:06:26.737 に答える