Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我可以将CGContextRef传递给从drawRect调用的方法吗?_Ios_Objective C_Uigraphicscontext - Fatal编程技术网

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

Ios 我可以将CGContextRef传递给从drawRect调用的方法吗?,ios,objective-c,uigraphicscontext,Ios,Objective C,Uigraphicscontext,我在Quartz 2D编程指南中找到了这一点: 要在iOS应用程序中绘制到屏幕,需要设置UIView对象并实现其drawRect:方法来执行绘制。当视图在屏幕上可见且其内容需要更新时,将调用视图的drawRect:方法。在调用自定义drawRect:方法之前,view对象会自动配置其绘图环境,以便代码可以立即开始绘图。作为此配置的一部分,UIView对象为当前图形环境创建图形上下文(CGContextRef不透明类型)。通过调用UIKit函数UIGraphicsGetCurrentContext

我在Quartz 2D编程指南中找到了这一点:

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


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

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

UIGraphicsGetCurrentContext只能从drawRect:method调用(或从中调用方法)否则它将返回零

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


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

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

嘿,伙计们。。。事情不是这样的。。。文档状态:通过调用UIKit函数UIGraphicsGetCurrentContext,可以在drawRect:方法中获得此图形上下文。我从被调用的方法调用UIGraphicsGetCurrentContext,它返回0x00(请参阅上面的问题)。。。我这里有三个不同的答案;我想最好的办法就是去做,然后看看。。。我会回来的。@spokane dude您可能想分享一些代码,您可以从
drawRect:
调用一些内容,并为您的
UIGraphicsGetCurrentContext
获取一个
NULL
,然后:可能会出现很多不同的问题,包括检查/打印上下文引用不正确。对于初学者,不能从-drawRect内调用方法并传递被认为有效的上下文。但是,如果在调用其他方法之前在drawRect中获取当前上下文,它似乎可以工作。。。需要更多的测试,但我想我发现了问题:在drawRect的开头调用UIGraphicsGetCurrentContext!谢谢大家!这是一个多么愚蠢的回答,因为下面的答案是完全正确的;显然,您必须从-drawRect内调用UIGraphicsGetCurrentContext才能使被调用的方法工作,但是您不能传递上下文——它在运行时被标记为无效。你想让我做什么?@斯波坎兄弟,我强烈怀疑你的发现的普遍性:我确信你所描述的在你的特定情况下是真实的,但我也确信我的代码在而且在从
drawRect
调用的其他方法中,没有任何问题痕迹。此外,还有人讨论获取图形上下文与传递图形上下文的相对性能,这意味着这两种方法都可以很好地工作。如果您发布了一些代码,我们可以查找它可能有什么问题。我也回答了下面的问题,但只是想检查一下:您不是直接调用
drawRect
,对吗?只有在需要时,UIKit才会调用它。如果要更新视图,应调用
setNeedsDisplay