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

Joh*_*ato 5 cocoa-touch cgcontext quartz-2d

/*  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);
Run Code Online (Sandbox Code Playgroud)

以上是我正在努力解决的代码.它应该做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
Run Code Online (Sandbox Code Playgroud)

我在头文件中引用了CGContextRef.

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

Mus*_*sis 18

为了让你的代码工作,它需要在drawRect你的UIView子类的方法中执行(你不drawRect直接调用- 当需要UIView渲染自己时,操作系统会调用它).您可能试图从触摸事件或viewDidLoad类似的东西中运行此代码.

  • 重申:你的代码不起作用(这意味着它会抛出你看到的错误),除非它在`UIView`子类的`drawRect`方法中运行. (6认同)
  • 并解释:UIView在调用你的`drawRect:`之前设置当前上下文.这是一个功能:在需要绘图时绘制,系统会为您跟踪.不要打它; 将绘图代码移动到应有的位置,并使用系统.当某些内容发生更改时,视图需要重绘,请将视图设置为需要显示. (4认同)