Ios 无法在CGContext(CGContextSetFillColorWithColor)中设置填充颜色

Ios 无法在CGContext(CGContextSetFillColorWithColor)中设置填充颜色,ios,cgcontext,cgcontextref,Ios,Cgcontext,Cgcontextref,对不起,我对CGContext的了解相当有限 我正在使用已接受答案中的代码在ui视图中绘制星星。我想要实现的是用两种不同的颜色显示星星(比如评级视图)。问题是,对于CGContextSetFillColorWithColor(),我似乎无法使用两种不同的颜色 相关代码: if (i < 3) { NSLog(@"__BLACK__"); CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColo

对不起,我对
CGContext
的了解相当有限

我正在使用已接受答案中的代码在
ui视图中绘制星星。我想要实现的是用两种不同的颜色显示星星(比如评级视图)。问题是,对于
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);
}
但是,填充颜色似乎不起作用,结果是:


我不明白我在这里做错了什么。

当您为上下文设置填充颜色时,它将用于该上下文中的每个对象。在本例中,所有5颗星都在同一上下文中绘制,因此只有最后一个颜色设置(红色)保持不变


通过在一个上下文中绘制5个不同的CGPATH,您可能可以实现您想要实现的目标。

for
的外部
for循环导致创建5组星星,后面的星星覆盖前面的星星(即,1颗黑星,然后是2颗第一颗被遮住的黑星,然后是3颗黑星遮住了2颗黑星,然后是4颗红星遮住了3颗黑星,等等)。尝试将
更改为(nsu整数i=0;i<5;i++){
更改为
for(nsu整数i=0;i<2;i++){
你应该会看到黑星。@bobnoble,你是对的,部分是对的。我复制了for语句,并在显示的代码之后添加了它,使用了我想要的颜色和减少的迭代次数。它成功了。你应该将此作为答案发布,我会接受它。
- (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__