Почему произошла ошибка неверного контекста? - PullRequest
7 голосов
/ 03 апреля 2010

Вот код, который я использую для рисования:

- (void) drawSomething
{

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBStrokeColor(context, 1, 0, 0, 1);
    CGContextSetLineWidth(context, 6.0);

    CGContextMoveToPoint(context, 100.0f, 100.0f);
    CGContextAddLineToPoint(context, 200.0f, 200.0f);
    CGContextStrokePath(context);

    NSLog(@"draw");

}

Но я получил такую ​​ошибку:

[Session started at 2010-04-03 17:51:07 +0800.]
Sat Apr  3 17:51:09 MacBook.local MyApp[12869] <Error>: CGContextSetRGBStrokeColor: invalid context
Sat Apr  3 17:51:09 MacBook.local MyApp[12869] <Error>: CGContextSetLineWidth: invalid context
Sat Apr  3 17:51:09 MacBook.local MyApp[12869] <Error>: CGContextMoveToPoint: invalid context
Sat Apr  3 17:51:09 MacBook.local MyApp[12869] <Error>: CGContextAddLineToPoint: invalid context
Sat Apr  3 17:51:09 MacBook.local MyApp[12869] <Error>: CGContextDrawPath: invalid context

Почему это побуждает меня сказать, что контекст недействителен?

Ответы [ 2 ]

12 голосов
/ 03 апреля 2010

Как документация говорит:

Текущий графический контекст по умолчанию равен nil. До вызова его drawRect: метод, объекты представления помещают действительный контекст в стек, делая его текущим.

Так что вам нужно поместить этот код в метод drawRect

8 голосов
/ 03 апреля 2010

От мой ответ до этот похожий вопрос :

Если это должно быть нарисовано на экране, вам нужно найти свой код рисования в методе -drawRect: UIView (или –drawInContext: CALayer). Чтобы обновить его содержимое, вам нужно позвонить -setNeedsDisplay в UIView или CALayer. Попытка рисования в любое другое время приведет к появлению ошибки «неверный контекст».

См. Также этот вопрос .

...