0

我在 Quartz 2D Programming Guide 中找到了这个:

要在 iOS 应用程序中绘制到屏幕上,您需要设置一个 UIView 对象并实现它的 drawRect: 方法来执行绘制。当视图在屏幕上可见并且其内容需要更新时,将调用视图的 drawRect: 方法。在调用您的自定义 drawRect: 方法之前,视图对象会自动配置其绘图环境,以便您的代码可以立即开始绘图。作为此配置的一部分,UIView 对象为当前绘图环境创建图形上下文(CGContextRef 不透明类型)。您可以通过调用 UIKit 函数 UIGraphicsGetCurrentContext 在 drawRect: 方法中获取此图形上下文。

由于我遇到了无效上下文的问题(因为当我返回重新绘制时它是 0x00),我想知道是否可以在-drawRect的开头获取当前上下文并以某种方式将其传递给我从内部调用的方法-绘制矩形

4

4 回答 4

3

只要这些方法不保存引用以供在调用期间之外使用,您绝对可以传递CGContextRef给调用的方法,您的代码应该没问题。但是,您传递的上下文引用将等同于通过 检索的上下文,因此我怀疑通过添加额外的参数可以获得很多好处。drawRect:drawRect:UIGraphicsGetCurrentContext

于 2013-04-09T16:48:49.957 回答
2

UIGraphicsGetCurrentContext 只能从 drawRect: 方法(或从它调用的方法)中调用,否则它将返回 nil。

于 2013-04-09T16:49:38.273 回答
2

您可以使用UIGraphicsGetCurrentContextfrom 调用的任何方法-drawRect。值得注意的是,-drawRect当需要更新视图时,不应该直接调用;-setNeedsDisplay而是打电话。

如果你想在你自己的离屏上下文中使用 UIKit 绘图系统,你可以使用UIGraphicsPushContext来设置当前上下文。

于 2013-04-09T17:03:17.457 回答
0

以我的经验,传递CGContextRef会产生相当“快”的内存泄漏。

于 2014-05-30T22:26:34.147 回答