我正在使用CGBitmapContextCreate调用创建自己的上下文。上下文已成功创建。我可以使用成功调用CGContextDrawImage在此上下文中绘制UIImage。但是,当我尝试使用UIImage的调用drawPatternInRect:时,它会给出错误'Context is nil'。
我确信上下文不是nil并且它是正确创建的,因为CGContextDrawImage在相同的上下文中工作正常。只有当上下文是UIView或者如果我在UIView的drawRect方法中创建上下文时,drawPatternInRect:call才能正常工作。但是,我不能使用UIView的上下文,因为我需要从这个上下文中生成UIImage。
有谁知道这里有什么问题或者是否有任何其他简单的drawPatternInRect方法?
答案 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 ];