Что не так с UIGraphicsGetCurrentContext ()? - PullRequest
1 голос
/ 25 марта 2011

Я создаю игру, поэтому в моей структуре есть класс Game, в котором элементы просят нарисовать себя. Это делается с помощью класса, унаследованного от UIView, который вызывает метод draw для экземпляра класса Game

// это версия игры

- (void)drawRect:(CGRect)rect {
    // Drawing code

    CGContextRef context = UIGraphicsGetCurrentContext();
    [jeu draw:context];
}

// поэтому метод Game просит все объекты нарисовать себя

-(void) draw: (CGContextRef) gc{
    GameElement* element ;

    for( element in drawArr )
    {
        [element draw:(CGContextRef) gc];
    }
}

некоторые элементы (шар и две границы, которые все унаследованы суперклассом GameElement) правильно рисуют, но некоторые границы не

вот метод рисования границ

- (void) draw: (CGContextRef) gc
{       
    CGFloat black[4] = {0.0f, 0.0f, 0.0f, 1.0f}; // R G B + Alpha
    CGPoint p [2];
    p[0].x = xStart ;
    p[0].y = yStart ;
    p[1].x = xEnd ;
    p[1].y = yEnd ;
    CGContextSetStrokeColor(gc, black); //Definie la couleur
    CGContextStrokeLineSegments(gc, p, 2 ) ;
}

Итак, в журнале консоли я прочитал:

Thu Mar 24 21:53:59 MacBook-Air-di-Michele-Giarratana.local IVBricker[381] <Error>: CGContextDrawImage: invalid context 0x0
Thu Mar 24 21:53:59 MacBook-Air-di-Michele-Giarratana.local IVBricker[381] <Error>: CGContextSetStrokeColor: invalid context 0x0
Thu Mar 24 21:53:59 MacBook-Air-di-Michele-Giarratana.local IVBricker[381] <Error>: CGContextStrokeLineSegments: invalid context 0x0
Thu Mar 24 21:53:59 MacBook-Air-di-Michele-Giarratana.local IVBricker[381] <Error>: CGContextSetStrokeColor: invalid context 0x0
Thu Mar 24 21:53:59 MacBook-Air-di-Michele-Giarratana.local IVBricker[381] <Error>: CGContextStrokeLineSegments: invalid context 0x0
Thu Mar 24 21:53:59 MacBook-Air-di-Michele-Giarratana.local IVBricker[381] <Error>: CGContextSetStrokeColor: invalid context 0x0
Thu Mar 24 21:53:59 MacBook-Air-di-Michele-Giarratana.local IVBricker[381] <Error>: CGContextStrokeLineSegments: invalid context 0x0
Thu Mar 24 21:53:59 MacBook-Air-di-Michele-Giarratana.local IVBricker[381] <Error>: CGContextSetStrokeColor: invalid context 0x0
Thu Mar 24 21:53:59 MacBook-Air-di-Michele-Giarratana.local IVBricker[381] <Error>: CGContextStrokeLineSegments: invalid context 0x0
Thu Mar 24 21:53:59 MacBook-Air-di-Michele-Giarratana.local IVBricker[381] <Error>: CGContextSetStrokeColor: invalid context 0x0
Thu Mar 24 21:53:59 MacBook-Air-di-Michele-Giarratana.local IVBricker[381] <Error>: CGContextStrokeLineSegments: invalid context 0x0

И я понятия не имею, что, черт возьми, это значит. Если графический контекст, созданный в ViewDesigner, одинаков для всех, почему одни объекты рисуют сами, а другие нет?

Спасибо всем

1 Ответ

0 голосов
/ 28 ноября 2011

Мы знаем, что ваш контекст становится недействительным. Проверяйте gc == nil в каждом методе рисования GameElement, пока не найдете первый с недопустимым контекстом.

UIView установит текущий контекст перед вызовом drawRect:, но не вызывайте drawRect вручную, вместо этого используйте метод setNeedsDisplay.

Другие способы, которыми контекст может умереть, вызывая UIGrhicsPushContext ()

Я думаю, что после определения того, где оно становится недействительным, у вас будет подсказка.

...