1

私は単純な塗りつぶし、同じ半径の2つの交差する円、および交差点だけを塗りつぶすことを試みています.以下は私が試したものです

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetLineWidth(context, 1.0);
    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
    CGContextSetStrokeColorWithColor(context, [UIColor yellowColor].CGColor);

   // Draw first circle    
    CGContextAddArc(context, 150, 150, 50, 0, 2 * M_PI, 1);
    CGContextStrokePath(context);

    // Draw second circle
    CGContextAddArc(context, 200, 150, 50, 0, 2 * M_PI, 1);
    CGContextEOClip(context);
    CGContextFillPath(context);

}

私のコードは、コンテキストで 2 番目の円をレンダリングしません。ここフォーラムで CGContextClip に関連する多くの質問をしましたが、それらのほとんどはサンプルで CGPath を使用しています。クリッピングできるのは CGpaths のみですか? 任意の提案やアイデアをいただければ幸いです。

ありがとうございました

4

2 に答える 2

2

関数CGContextStrokePath()CGContextEOClip()およびCGContextFillPath() すべてが現在のパスをクリアします。したがって、ファイナルCGContextFillPath()には埋めるパスがありません。

次のコードは、円の交点を描画するために機能するはずです。

// Use first circle as clipping path:
CGContextAddArc(context, 150, 150, 50, 0, 2 * M_PI, 1);
CGContextClip(context);
// Draw second circle:
CGContextAddArc(context, 200, 150, 50, 0, 2 * M_PI, 1);
CGContextFillPath(context);

更新:次のコードは、交差点を塗りつぶしてストロークします。

CGContextSaveGState(context);
CGContextAddArc(context, 150, 150, 50, 0, 2 * M_PI, 1);
CGContextClip(context);
CGContextAddArc(context, 200, 150, 50, 0, 2 * M_PI, 1);
CGContextDrawPath(context, kCGPathFillStroke);
CGContextRestoreGState(context);
CGContextAddArc(context, 200, 150, 50, 0, 2 * M_PI, 1);
CGContextClip(context);
CGContextAddArc(context, 150, 150, 50, 0, 2 * M_PI, 1);
CGContextDrawPath(context, kCGPathStroke);

(動作しない元のコード:)

パスを塗りつぶしてストロークするには、次を使用しますCGContextDrawPath()

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetLineWidth(context, 1.0);
CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
CGContextSetStrokeColorWithColor(context, [UIColor yellowColor].CGColor);

CGContextAddArc(context, 150, 150, 50, 0, 2 * M_PI, 1);
CGContextAddArc(context, 200, 150, 50, 0, 2 * M_PI, 1);
CGContextDrawPath(context, kCGPathEOFillStroke);
于 2013-10-08T16:43:52.347 に答える