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

我想绘制一个UIImage到我的UIView的上下文。 我用这个代码与上下文注释进出…

- (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 

如果我取消注释UIGraphicsBeginImageContext行我没有得到任何东西绘制,没有错误。

我需要使用默认的graphics上下文,并以某种方式声明?

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

这听起来像是你直接调用drawRect: 所以它会从你的呼叫中调用一次,而从真正的绘图循环中调用一次。

  • 随着上下文的创build,你在一个新的背景下做所有的绘图,然后丢弃它,所以你永远不会看到任何东西
  • 在缺less上下文创build的情况下,您会从手动调用drawRect:获取错误drawRect:实际的绘图发生在真正的drawRect:所以您可以看到您的图像。

不要直接调用drawRect: 调用setNeedsDisplaydrawRect:将在适当的位置为您调用。

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

我现在不使用CALayer,而只是在视图中将每帧video的一部分绘制到默认graphics上下文中。

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

现在它不被使用我只需要使用下面的代码来绘制图像…

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

现在我只是做一个图像,我作为一个CGImageRef并调整矩形…希望相同的事情。