2

ストロークで塗りつぶされた長方形を描画することになっている次のコードがありますが、塗りつぶしが表示されません。

    [[UIColor greenColor] setStroke];
    [[UIColor brownColor] setFill];

    CGContextBeginPath(context);
    CGContextMoveToPoint(context, right, bottom);
    CGContextAddLineToPoint(context, right,top);
    CGContextAddLineToPoint(context,left, top);
    CGContextAddLineToPoint(context, left, bottom);
    CGContextAddLineToPoint(context, right, bottom);

    CGContextStrokePath(context);
    CGContextFillPath(context);

ストロークが機能し、塗りつぶしのない(または白い塗りつぶしの)素敵な緑色の長方形が得られます。これはiOS用のUIView内にあります。非常に単純なようで、それは私を狂わせています!

4

3 に答える 3

6

これを行う正しい方法は、塗りつぶしとパスの両方を含むように描画モードを設定することです。

CGPathDrawingMode mode = kCGPathFillStroke;
CGContextClosePath( context ); //ensure path is closed, not necessary if you know it is
CGContextDrawPath( context, mode );

を使用CGContextFillPath()して単純に塗りつぶすことができますが、基本的にCGContextDrawPath()は、を自動的に呼び出しCGContextClosePath()て使用kCGPathFillCGPathDrawingModeます。CGContextDrawPath()必要な塗りつぶし/ストロークのタイプを取得するには、常に独自のパラメータを使用して入力することをお勧めします。偶数-奇数描画モードの1つを使用して、凸状のパスに穴を開けることもできます。

于 2012-09-10T19:47:16.633 に答える
3

CGContextStrokePathのドキュメントから:

Quartzは、グラフィックス状態の線幅とストロークの色を使用してパスをペイントします。この関数を呼び出すときの副作用として、Quartzは現在のパスをクリアします。

于 2012-05-11T14:59:41.883 に答える
0

おそらく、 CGContextFillPathを呼び出す前にCGContextClosePathを呼び出す必要があります

于 2012-05-11T15:07:31.983 に答える