请原谅我,但我对CGContext
的了解相当有限。
我使用接受的答案HERE中的代码在UIView
中绘制星标。我想要实现的是以2种不同颜色显示星星(如评级视图)。问题是,我似乎无法为CGContextSetFillColorWithColor()
使用2种不同的颜色。
相关代码:
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__
但是,填充颜色似乎没有生效,结果是:
我不明白我在这里做错了什么。
答案 0 :(得分:0)
当您为上下文设置填充颜色时,它将在该上下文中的每个对象上使用。在您的情况下,所有5颗星都是在相同的上下文中绘制的,因此只有最后一种颜色设置(红色)仍然存在。
您可以通过在一个上下文中绘制5个不同的CGPath来实现您想要实现的目标。