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();
}