Ios 绘制UIImage时出现无效的上下文错误

Ios 绘制UIImage时出现无效的上下文错误,ios,cocoa-touch,uikit,uiimage,Ios,Cocoa Touch,Uikit,Uiimage,我正在尝试根据UIView的上下文绘制UIImage。我已经将这段代码与上下文内容一起使用,并对其进行了注释 - (void)drawRect:(CGRect)rect { //UIGraphicsBeginImageContextWithOptions(rect.size,YES,[[UIScreen mainScreen] scale]); //UIGraphicsBeginImageContext(rect.size); UIImage *newImage = [

我正在尝试根据UIView的上下文绘制UIImage。我已经将这段代码与上下文内容一起使用,并对其进行了注释

- (void)drawRect:(CGRect)rect
{
    //UIGraphicsBeginImageContextWithOptions(rect.size,YES,[[UIScreen mainScreen] scale]);
    //UIGraphicsBeginImageContext(rect.size);

    UIImage *newImage = [UIImage imageNamed:@"character_1_0001.png"];
    //[newImage drawAtPoint:CGPointMake(200, 200)];
    [newImage drawInRect:rect];

    //UIGraphicsEndImageContext();
}
据我所知,我不需要设置图像上下文来执行此操作,事实上,如果没有它,我确实可以在视图中看到绘制的图像,但我也会在日志中看到此错误

<Error>: CGContextSaveGState: invalid context 0x0
:CGContextSaveGState:无效的上下文0x0
如果取消对UIGraphicsBeginImageContext行的注释,则不会绘制任何内容,也不会出现错误

我是否需要使用默认的图形上下文并以某种方式声明它


我需要绘制图像,因为我想在上下文中添加图像,而不能只生成UIImageView对象的负载。

听起来像是您直接调用了
drawRect:
。因此,它会从您的调用中调用一次,从真正的绘图循环中调用一次

  • 有了上下文创建,您可以在新上下文中完成所有图形,然后放弃它,这样您就不会看到任何东西
  • 由于缺少上下文创建,您会从手动调用的
    drawRect:
    中得到错误,而实际的绘图发生在正版
    drawRect:
    中,因此您可以看到您的图像

不要直接调用
drawRect:
。Call
setNeedsDisplay
drawRect:
将在适当的时间为您调用

我发现了发生的事情。自定义UIView的ViewController主机正在实例化CALayer对象。这是一些旧代码,以前用作AVCaptureSession位图的绘图层,我正在使用它生成图像

我现在不使用CALayer,而是在视图中的默认图形上下文中绘制每帧视频的一个片段

出于某种原因,此CALayer的实例化导致了上下文中的冲突

现在它没有被使用,我只需要使用以下代码来绘制图像

- (void)drawRect:(CGRect)rect
{
    UIImage *newImage = [UIImage imageNamed:@"character_1_0001.png"];
    [newImage drawInRect:rect];
}

现在我只需对作为CGImageRef传入的图像执行相同的操作,并调整rect。。。希望如此。

您必须在其他地方有一些调用CGContextSaveGState的代码?您的意思是,仅使用
UIImage=
drawInRect
行,就会出现此错误?如果我取消注释该代码中的上下文行,则不会出现错误,但我在视图中看不到任何绘制内容。因为它是我看到我的图像绘制,但得到的上下文错误。这很奇怪。你在别的地方不叫CGContextSaveGState吗?不。我正在测试这个。将尝试绘制一些文本。另外,您没有直接调用
drawRect
,是吗?如果是这样的话,在您绘图时可能没有有效的上下文,这可能会导致错误。谢谢。我不是直接给drawRect打电话,但我会谈谈上下文的问题。谢谢你的反馈。真遗憾,我真的为自己的回答感到高兴!很高兴你让它工作了。