为什么drawPatternInRect:on UIImage只能在Views上下文中工作

时间:2011-01-10 06:40:44

标签: uiimage cgbitmapcontextcreate

我正在使用CGBitmapContextCreate调用创建自己的上下文。上下文已成功创建。我可以使用成功调用CGContextDrawImage在此上下文中绘制UIImage。但是,当我尝试使用UIImage的调用drawPatternInRect:时,它会给出错误'Context is nil'。

我确信上下文不是nil并且它是正确创建的,因为CGContextDrawImage在相同的上下文中工作正常。只有当上下文是UIView或者如果我在UIView的drawRect方法中创建上下文时,drawPatternInRect:call才能正常工作。但是,我不能使用UIView的上下文,因为我需要从这个上下文中生成UIImage。

有谁知道这里有什么问题或者是否有任何其他简单的drawPatternInRect方法?

1 个答案:

答案 0 :(得分:0)

在Cocoa中还有一个与图形上下文相关的概念。在Core Graphics中有CGContextRef,它必须作为显式参数传递给每个CG绘图调用。在iOS的许多其他地方,存在当前上下文的概念,其是全局当前上下文(每个线程的全局),作为许多绘图调用的隐含参数。许多API包括UIImage在当前上下文中绘制。请参阅标题UIGraphics.h。

通常在调用drawRect:之前由视图系统为您设置当前上下文,这就是为什么在这些情况下绘图似乎有效。如果您自己创建了上下文,则需要显式设置当前上下文。此代码应该适合您:

UIGraphicsPushContext( yourCGContext );

// Do your drawing here

UIGraphicsPopContext();

在Mac上,使用NSGraphics上下文的情况类似,请参阅Apple的NSGraphicsContext文档。

NSGraphicsContext* nsGraphicsContext = [ NSGraphicsContext 
        graphicsContextWithGraphicsPort: yourCGContext flipped: NO ];
[ NSGraphicsContext saveGraphicsState ];
[ NSGraphicsContext setCurrentContext: nsGraphicsContext ];

// Do your drawing here

[ NSGraphicsContext restoreGraphicsState ];