Quartz Core рисует несколько примитивов

Я хочу нарисовать зеленый круг с белым прямоугольником (или несколькими прямоугольниками). Но я не могу понять, как использовать CGContext методы. Вот мой код. Сначала я рисую круг и закрашиваю его, затем я хочу нарисовать что-то еще внутри своего круга. Но если я использую тот же CGContextRef для рисования внутри примитивов, CGContextSetFillColor изменит цвет моего круга.

- (void)drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextAddEllipseInRect(ctx, rect);
    CGContextSetFillColor(ctx, CGColorGetComponents([self.color CGColor]));
    CGContextFillPath(ctx);

    switch (self.type)
    {
        case ETBRoundViewTypeBook:
        {
            CGRect bookRect = CGRectMake(CGRectGetMidX(rect) - 10, CGRectGetMidY(rect) - 12, 20, 24);
            CGContextAddRect(ctx, bookRect);
            CGContextSetFillColor(ctx, CGColorGetComponents([UIColor whiteColor].CGColor));
            CGContextFillPath(ctx);
        }
        case ETBRoundViewTypeList:
        {
            break;
        }
        case ETBRoundViewTypeTick:
        {
            break;
        }
        default:
            break;
    }
}

EDIT: Проблема была решена заменой CGContextSetFillColor на CGContextSetFillColorWithColor.


person Valentin Shamardin    schedule 30.01.2014    source источник


Ответы (1)


Я только что попробовал это и работает.

-(void)drawRect:(CGRect)rect{
    CGContextRef ctx =UIGraphicsGetCurrentContext();
    CGContextAddEllipseInRect(ctx, rect);
    CGContextSetFillColorWithColor(ctx, [UIColor greenColor].CGColor);
    CGContextFillPath(ctx);
    CGContextAddEllipseInRect(ctx, CGRectMake(30, 30, 40, 40));
    CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
    CGContextFillPath(ctx);
}
person santhu    schedule 30.01.2014
comment
похоже, это не сработает с whiteColor. redColor работает. - person Valentin Shamardin; 30.01.2014
comment
нет, он работает и с белым цветом. Просто создайте подкласс UIView с добавленным выше кодом drawRect и протестируйте его, добавив в subView. Это работает. - person santhu; 30.01.2014
comment
нужно ли добавлять подвид в мой пользовательский вид? Можно ли рисовать только в одном представлении, которое является подклассом UIView? - person Valentin Shamardin; 30.01.2014
comment
Спасибо! Я только что заменил CGContextSetFillColor на CGContextSetFillColorWithColor - person Valentin Shamardin; 30.01.2014