如何获取UIGraphicsPushContext参数的上下文?

时间:2011-12-11 14:11:19

标签: iphone objective-c ios cocoa

正如苹果公司的文件所说,UIGraphicsGetCurrentContext只能用于drawRect方法。 如果你想在其他地方使用它,你必须先推送一个上下文。

现在我想使用UIGraphicsGetCurrentContext在我自己的方法中获取一个名为render的上下文。 我怎样才能获得上下文?

我可以在drawRect中获取上下文并将其保存在非局部变量中吗? 并在另一个方法中推送它,然后使用UIGraphicsGetCurrentContext来使用它。 如果是这样,为什么需要我推它并再次获得它?我可以直接使用非局部变量。

3 个答案:

答案 0 :(得分:1)

您可以在计时器上调用需要重新绘制的视图的setNeedsDisplay,并让drawRect拨打render(而不是直接在计时器上调用render) 。通过这种方式,您可以避免使用CG上下文进行异常操作,并在矩形滚动屏幕时阻止渲染。

编辑: 当您希望特定上下文成为UI Kit运行的上下文时,可以使用UIGraphicsPushContext和UIGraphicsPopContext。我对他们所做的事情的初步了解是不正确的(我自己对iOS开发相对较新)。例如,存在隐含地在当前上下文上操作的操作(例如,设置颜色或其他绘图参数的一些操作)。如果您为位图设置上下文,然后想要使用修改当前上下文状态的操作(即修改上下文参数但不采用特定上下文引用的操作)一个参数),你推送位图上下文使其成为当前,执行隐式引用它的操作,并立即弹出上下文。

特别感谢rob mayoff向我解释这一点。

答案 1 :(得分:1)

要获得可以在drawRect之外的渲染调用中绘制的CGContext,您可以分配自己的图形位图,并从该位图创建上下文。然后你可以随时画到那个上下文。

如果您希望在绘制后显示该上下文,可以使用它来创建图像,然后在UIView的drawRect中将该图像绘制到视图中。或者,您也可以将该图像分配给视图的CALayer内容,该内容应在UI运行循环处理期间的某个时间刷新到显示内容。

答案 2 :(得分:0)

您可以使用CGContextSaveCGStateCGContextRestoreCGState来推送和弹出当前的图形上下文。在这个link一个简单的例子。