0

コア グラフィックスの理解を開始します。塗りと線でパスを描いていますが、クリッピングできません。ここで私が間違っていることを誰かに教えてもらえますか?

このコードは、私の UIView サブクラスの drawRect メソッドにあります。

//Draw a closed path with rounded corners, a fill and a stroke.
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 4.0);
CGContextSetStrokeColorWithColor(context,[UIColor blueColor].CGColor);
CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
//fill
CGContextMoveToPoint(context, 10, 10);
CGContextAddLineToPoint(context, 10, 100);
CGContextAddArcToPoint(context, 10,140, 30,140, 20);
CGContextAddLineToPoint(context, 200, 140);
CGContextAddArcToPoint(context, 240,140, 240,100, 20);
CGContextAddLineToPoint(context, 240, 10);
CGContextClosePath(context);
CGContextFillPath(context);
//stroke
CGContextMoveToPoint(context, 10, 10);
CGContextAddLineToPoint(context, 10, 100);
CGContextAddArcToPoint(context, 10,140, 30,140, 20);
CGContextAddLineToPoint(context, 200, 140);
CGContextAddArcToPoint(context, 240,140, 240,100, 20);
CGContextAddLineToPoint(context, 240, 10);
CGContextClosePath(context);
CGContextStrokePath(context);
CGContextBeginPath(context);
//clip??
CGContextMoveToPoint(context, 10, 10);
CGContextAddLineToPoint(context, 10, 100);
CGContextAddArcToPoint(context, 10,140, 30,140, 20);
CGContextAddLineToPoint(context, 200, 140);
CGContextAddArcToPoint(context, 240,140, 240,100, 20);
CGContextAddLineToPoint(context, 240, 10);
CGContextClosePath(context);
CGContextClip(context);
4

2 に答える 2

1

クリップする必要がある描画を行う前にコンテキストをクリップし、後でコンテキストを復元する必要があります

于 2012-07-10T07:06:59.920 に答える
0

CGContextClipbeforeCGContextStrokePathと afterを使用する必要があります CGContextClosePath。もういい。余分なコードを書く必要はありません。次のようにこのようにしてみてください..

    CGContextClosePath(context);
    CGContextClip(context);
    CGContextStrokePath(context);

お役に立てると思います。

于 2012-07-10T07:31:24.957 に答える