使用CGContext *函数时出现“invalid context 0x0”错误

时间:2011-10-28 17:24:50

标签: cocoa-touch quartz-2d cgcontext

/*  Adding the Path */
UserGraphBuff = UIGraphicsGetCurrentContext();

CGContextSetRGBStrokeColor(UserGraphBuff,5,10,0,1);
CGContextSetLineWidth(UserGraphBuff, 2 );

CGContextBeginPath(UserGraphBuff);  

//line to last user point
CGContextAddLineToPoint(UserGraphBuff, (*xVal)[sizeof xVal / sizeof *xVal - 1], (*yNewVal)[sizeof yNewVal / sizeof *yNewVal - 1]);
//line to rest of user points in reverse order
for (int i = sizeof xVal / sizeof *xVal - 1; i > -1; i--){
    CGContextAddLineToPoint(UserGraphBuff, (*xVal)[i], (*yNewVal)[i]);
}

//EOFill
CGContextEOFillPath(UserGraphBuff);

以上是我正在努力解决的代码。它应该做CGContext所说的那样,但我没有得到任何东西。 我一直收到此错误:

Fri Oct 28 13:18:40 case.app testApplication[4127] <Error>: CGContextSetRGBStrokeColor: invalid context 0x0
Fri Oct 28 13:18:40 case.app testApplication[4127] <Error>: CGContextSetLineWidth: invalid context 0x0
Fri Oct 28 13:18:40 case.app testApplication[4127] <Error>: CGContextBeginPath: invalid context 0x0
Fri Oct 28 13:18:40 case.app testApplication[4127] <Error>: CGContextAddLineToPoint: invalid context 0x0
Fri Oct 28 13:18:40 case.app testApplication[4127] <Error>: CGContextDrawPath: invalid context 0x0

我在头文件中引用了CGContextRef。

我认为我不太了解CGContext,也不知道CGContextRef应该是什么。

1 个答案:

答案 0 :(得分:18)

要使代码生效,需要在drawRect子类的UIView方法中执行(并且不要直接调用drawRect - 这是由OS调用的当它需要UIView渲染自己时)。您可能会尝试从触摸事件或viewDidLoad或类似的事件中运行此代码。