Ios 绘制UIImage时出现无效的上下文错误
我正在尝试根据UIView的上下文绘制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 = [
- (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:
。CallsetNeedsDisplay
和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打电话,但我会谈谈上下文的问题。谢谢你的反馈。真遗憾,我真的为自己的回答感到高兴!很高兴你让它工作了。