CALayer подкласс "drawInContext" вызван, но не рисование? - PullRequest
8 голосов
/ 24 января 2012

Я пытаюсь нарисовать в подклассе CALayer.drawInContext вызывается с setNeedsDisplay, но ничего не рисуется.Что я делаю / ошибаюсь здесь?

 - (void)drawInContext:(CGContextRef)ctx
{
    CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
    [[UIBezierPath bezierPathWithRect:CGRectMake(100, 100, 100, 100)] fill];

    [@"Vowel" drawAtPoint:CGPointMake(0, 0) withFont:[UIFont fontWithName:@"Chalkboard" size:14]];
}

Редактировать Я получаю эту ошибку:

CGContextAddPath: недопустимый контекст 0x0

Спасибо Шани

1 Ответ

31 голосов
/ 24 января 2012

Вы смешиваете CG-звонки и UIKit-звонки. -[UIBezierPath fill] и -[NSString drawAtPoint:withFont:] оба рисуют в контексте в верхней части стека контекста UIKit. Это не то же самое, что контекст, переданный в -drawInContext:. Вы должны изменить свою функцию так, чтобы она выглядела так:

- (void)drawInContext:(CGContextRef)ctx {
    UIGraphicsPushContext(ctx);
    [[UIColor redColor] setFill];
    [[UIBezierPath bezierPathWithRect:CGRectMake(100, 100, 100, 100)] fill];
    [@"Vowel" drawAtPoint:CGPointMake(0, 0) withFont:[UIFont fontWithName:@"Chalkboard" size:14]];
    UIGraphicsPopContext();
}
...