我可以将CGContextRef传递给从drawRect调用的方法吗?

时间:2013-04-09 16:43:08

标签: ios objective-c uigraphicscontext

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

  

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

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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

您可以使用UIGraphicsGetCurrentContext中调用的任何方法-drawRect。值得注意的是,当您需要更新视图时,不应直接致电-drawRect;请改为呼叫-setNeedsDisplay

如果您想将UIKit绘图系统与您自己的离屏上下文一起使用,您可以使用UIGraphicsPushContext来设置当前上下文。

答案 3 :(得分:0)

根据我的经验,传递CGContextRef会产生非常“快速”的内存泄漏。