CALayer подкласс "drawInContext" вызван, но не рисование?

Я пытаюсь нарисовать в подклассе 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 ответ

Решение

Вы смешиваете 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();
}
Другие вопросы по тегам