0

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

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

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

4

1 回答 1

0

Cocoa 中有一个与图形上下文相关的附加概念。在 Core Graphics 中,CGContextRef 必须作为显式参数传递给每个 CG 绘图调用。在 iOS 的许多其他地方,有当前上下文的概念,它是一个全局当前上下文(每个线程都是全局的),作为许多绘图调用的隐含参数。包括 UIImage 在内的许多 API 在当前上下文中绘制。请参阅标题 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 ];
于 2011-01-10T15:48:16.687 回答