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

时间:2011-10-04 02:31:58

标签: ios cocoa-touch uikit 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行,我不会得到任何东西,也没有错误。

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

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

2 个答案:

答案 0 :(得分:3)

听起来你直接打电话给drawRect:。因此,它会从您的通话中调用一次,并从真正的绘图循环中调用一次。

  • 在创建上下文的情况下,您可以在新的上下文中完成所有绘图,然后将其丢弃,这样您就不会看到任何内容
  • 如果缺少上下文创建,则会从手动调用drawRect:中收到错误,实际绘图将在真实drawRect:中进行,以便您查看图像。

请勿直接致电drawRect:。将在适当的时候为您致电setNeedsDisplaydrawRect:

答案 1 :(得分:0)

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

我现在没有使用CALayer而只是在我视图中将每帧视频切片绘制到默认图形上下文中。

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

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

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

现在我只是对我作为CGImageRef传入的图像做同样的事情并调整矩形...希望。