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__