我已经阅读了Quartz 2D编程指南的相关部分,但是在文档中似乎没有涉及iOS的内容,无法找到下面问题的答案:
我的应用程序在一个UIView中显示绘图。不时需要以某种方式更新绘图,例如更改一个形状的填充颜色(我保留了CGPathRefs以便稍后使用不同的填充颜色重新绘制它们)。如上述文档第169页的“使用CGLayer进行绘图”一节所述,我考虑将整个绘图绘制到从CGLayer获取的CGContext中,方法如下:
我的问题是,我应该从哪里获取我的
我的应用程序在一个UIView中显示绘图。不时需要以某种方式更新绘图,例如更改一个形状的填充颜色(我保留了CGPathRefs以便稍后使用不同的填充颜色重新绘制它们)。如上述文档第169页的“使用CGLayer进行绘图”一节所述,我考虑将整个绘图绘制到从CGLayer获取的CGContext中,方法如下:
CGContextRef offscreenContext = CGLayerGetContext(offscreenLayer);
接下来我可以在屏幕外面对CGContext
进行更新,并在UIView
的drawRect:
方法中将CGLayer
绘制到我的UIView中,如下所示:
CGContextDrawLayerAtPoint(viewContext, CGPointZero, offscreenLayer);
我的问题是,我应该从哪里获取我的
CGLayer
呢? 我的理解是,我必须使用CGLayerCreateWithContext
创建它,并提供一个CGContext
作为参数,以便它继承大部分属性。显然,正确的上下文应该是我正在获取的UIView
的上下文。CGContextRef viewContext = UIGraphicsGetCurrentContext();
但如果我没记错的话,我只能在drawRect
方法中获得它,并且不能假设我得到的上下文将在下一次调用该方法时是相同的,也就是说,我只能在该方法中本地使用那个CGContext
。
那么,我怎样才能获得一个CGContext
,以便用它来初始化我的CGLayer
,创建一个离屏的CGContext
进行绘制,然后将整个图层绘制回我的UIView
的CGContext
中呢?
附言:如果上面的任何内容不合理或不明智,请告诉我。我刚开始了解Quartz 2D。