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

正如苹果的文档所说,UIGraphicsGetCurrentContext只能用在drawRect方法中。 如果你想在另一个地方使用它,你必须先推送一个上下文。

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

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

你可以调用你需要在定时器上重绘的视图的setNeedsDisplay ,并让它的drawRect调用你的render (而不是直接在定时器上调用你的render器)。 这样你就可以避免CG上下文的exception操作,并防止矩形从屏幕上滚动时的渲染。

编辑:当您想要特定的上下文成为UI Kit工作的上下文时,使用UIGraphicsPushContext和UIGraphicsPopContext。 我对他们所做的最初的理解是不正确的(我自己对iOS开发相对比较陌生)。 例如,在当前上下文中存在隐式操作的操作(例如,设置颜色或其他绘图参数的一些操作)。 如果你设置了一个上下文来绘制位图,然后你想要使用一个操作来修改当前上下文的状态(例如,修改上下文参数的操作,但是并没有把特定的上下文引用作为一个参数),你推动位图上下文,使其最新,执行隐式引用它的操作,并popup右上方的上下文。

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

为了得到一个CGContext,你可以在drawRect之外的渲染调用中绘制CGContext,你可以分配你自己的graphics位图,并从该位图创build一个上下文。 然后你可以随时抽出这个上下文。

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

您可以使用CGContextSaveCGStateCGContextRestoreCGState来推送和popup当前的graphics上下文。 在这个链接一个简单的例子。