Прошу прощения, но мои знания о CGContext
довольно ограничены.
Я использую код из принятого ответа ЗДЕСЬ, чтобы рисовать звезды в UIView
. Чего я хочу добиться, так это показать звезды в двух разных цветах (например, в рейтинге). Проблема в том, что я не могу использовать 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__
Однако цвета заливки, похоже, не действуют, и результат:
Я не понимаю, что я делаю неправильно здесь.
for
приводит к созданию 5 наборов звезд, причем более поздние наборы звезд покрывают более ранние наборы звезд (т. е. 1 черная звезда, затем 2 черные звезды с закрытой первой звездой, затем 3 черных звезды покрывают 2 черных звезды). звезды, затем 4 красные звезды, закрывающие 3 черные звезды и т. д.). Попробуйте изменитьfor (NSUInteger i = 0; i < 5; i++) {
наfor (NSUInteger i = 0; i < 2; i++) {
, и вы должны увидеть черные звездочки. - person bobnoble   schedule 22.10.2014