-1

申し訳ありませんが、私の知識CGContextはかなり限られています。

受け入れられた回答HEREのコードを使用して、UIView. 私が達成したいのは、星を2つの異なる色で表示することです(評価ビューのように)。問題は、 に 2 つの異なる色を使用できないように見えることですCGContextSetFillColorWithColor()

関連コード:

if (i < 3) {

    NSLog(@"__BLACK__");

    CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);

} else {

    NSLog(@"__RED__");

    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
    CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
}

完全なコード:

- (void) drawRect:(CGRect)rect {

    int aSize = 20;

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, aSize);

    CGFloat xCenter = 15.0;
    CGFloat yCenter = 12.5;

    float  w = 25.0;
    double r = w / 2.0;
    float flip = -1.0;

    for (NSUInteger i = 0; i < 5; i++) {

        if (i < 3) {

            NSLog(@"__BLACK__");

            CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
            CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);

        } else {

            NSLog(@"__RED__");

            CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
            CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
        }

        double theta = 2.0 * M_PI * (2.0 / 5.0); // 144 degrees

        CGContextMoveToPoint(context, xCenter, r * flip + yCenter);

        for (NSUInteger k = 1; k < 5; k++) {

            float x = r * sin(k * theta);
            float y = r * cos(k * theta);
            CGContextAddLineToPoint(context, x + xCenter, y * flip + yCenter);
        }
        xCenter += 37.5;
    }

    CGContextClosePath(context);
    CGContextFillPath(context);
}

コンパイルと実行時にログを取得します:

__BLACK__
__BLACK__
__BLACK__
__RED__
__RED__

ただし、塗りつぶしの色が有効に見えず、結果は次のようになります。

ここに画像の説明を入力

ここで何が間違っているのかわかりません。

4

1 に答える 1

0

コンテキストの塗りつぶしの色を設定すると、そのコンテキスト内のすべてのオブジェクトで使用されます。あなたの場合、5 つの星はすべて同じコンテキスト内に描画されるため、最後の色設定 (赤) のみが保持されます。

1 つのコンテキストで描画された 5 つの異なる CGPath を使用して、達成したいことを達成できる可能性があります。

于 2014-10-22T11:44:19.713 に答える