2013-04-09 77 views
0

我发现这个石英2D编程指南:我可以将CGContextRef传递给从drawRect调用的方法吗?

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

因为我有无效的上下文的问题(因为它是为0x00,当我回去重新绘制),我在想,如果我能得到的-drawRect开始的当前上下文,并以某种方式传递我从-drawRect内调用的方法?

+1

我回答如下,但只是想检查:你不直接调用'drawRect',对吧?它仅在需要时才由UIKit调用。如果你想更新你的视图,你应该调用'setNeedsDisplay'来代替。 – 2013-04-09 17:41:24

回答

3

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

+0

嘿家伙......这不是发生了什么......文档状态:**您通过调用UIKit函数UIGraphicsGetCurrentContext。**获得此图形上下文在您的drawRect:方法。** 我从被调用的方法调用UIGraphicsGetCurrentContext和它返回0x00(请参阅上面的问题)......我在这里有三个不同的答案;我想最好的办法是做到这一点,看看...我会回到你们所有人。 – SpokaneDude 2013-04-09 16:55:59

+0

@ spokane-dude然后你可能想分享一些你从'drawRect:'调用某些代码的代码,然后为你的'UIGraphicsGetCurrentContext'获得一个'NULL':可能存在很多不同的问题,包括检查/打印上下文错误地提交。 – dasblinkenlight 2013-04-09 16:58:35

+0

对于初学者,您可以**不**从-drawRect中调用方法并传递被认为有效的上下文。但是,如果我在调用其他方法之前获取了drawRect中的当前上下文,它似乎工作......需要更多测试,但我认为我发现了这个问题:在drawRect的开头调用UIGraphicsGetCurrentContext!谢谢大家! – SpokaneDude 2013-04-09 17:14:03

2

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

2

您可以从-drawRect的任何方法使用UIGraphicsGetCurrentContext。值得注意的是,当您需要更新视图时,不应直接拨打-drawRect;改为拨打-setNeedsDisplay

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

0

根据我的经验,通过CGContextRef会产生相当“快”的内存泄漏。

相关问题