UIGraphicsGetCurrentContext()有什么问题?

时间:2011-03-24 21:23:37

标签: objective-c quartz-2d cgcontext

我正在构建一个游戏,所以在我的结构中,我有Game类要求元素绘制自己。这是由从UIView继承的类完成的,该类在Game类的实例上调用draw方法

// jeu是游戏的基础

- (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 :(得分:0)

我们知道您的背景变得无效。检查每个GameElement绘制方法中是否gc == nil,直到找到第一个具有无效上下文的方法。

UIView将在调用drawRect:之前设置当前上下文,但不要手动调用drawRect,而是使用setNeedsDisplay方法。

上下文可能会死的其他方式,调用UIGrhicsPushContext()

我认为在确定它无效之后,你会有一个线索。