Простите меня, но мои знания CGContext
довольно ограничены.Невозможно установить цвет заливки в CGContext (CGContextSetFillColorWithColor)
Я использую код из принятого ответа HERE, чтобы нарисовать звезды в 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 черную звезду, затем две черные звезды с первой звездой, закрытой, затем 3 черные звезды, покрывающие 2 черные звезды, затем 4 красные звезды, покрывающие 3 черные звезды и т. д.). Попробуйте изменить 'for (NSUInteger i = 0; i <5; i ++) {' to 'for (NSUInteger i = 0; i <2; i ++) {', и вы должны увидеть черные звезды. – bobnoble
@ bobnoble, вы были правы, частично. Я * реплицировал * инструкцию ** для ** и добавил ее после показанного кода, с моим желаемым цветом и сокращением итераций. Это сработало. Вы должны опубликовать это как ответ, и я соглашусь с ним. – n00bProgrammer