我的应用程序在UIVIEw中显示绘图.我不得不以某种方式更新图纸,例如更改其中一个形状的填充颜色(我将CGPathrefs保留为重要的形状,以便以后可以使用不同的填充颜色重绘它们).如上述文档第169页的“使用CGLayer绘图”一节所述,我想将整个绘图绘制成一个CGContext,我将从CGLayer中获取,如下所示:
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中?
PS:当你在它的时候;如果上面的任何内容没有意义或没有理智,请告诉我.我刚刚开始关注Quartz 2D.
解决方法 首先,如果你是在iOS环境中进行的,我认为你是对的.文档清楚地说,获取CGContextRef的唯一方法是CGContextRef ctx = UIGraphicGetCurrentContext();
然后使用该上下文创建CGLayer
CGLayerRef layer = CGLayerCreateWithContext(ctx,(CGSize){0,0},NulL);
如果要在该图层上绘制,则必须使用从图层获得的上下文绘制它. (它与您之前传递的用于创建CGLayer的上下文有些不同).我猜CGLayerCreateWithContext保存了它可以从传入的上下文中获取的信息,但不是所有内容. (其中一个示例是colorSpace信息,您必须在使用CGLayer中的上下文填充内容时重新指定).
您可以从CGLayerGetContext()函数获取CGLayer上下文引用并使用它来绘制.
CGContextRef layerCtx = CGLayerGetContext(layer);CGContextBeginPath(layerCtx);CGContextMovetoPoint(layerCtx,-10,10);CGContextAddlinetoPoint(layerCtx,100,100);CGContextClosePath(layerCtx);
我发现的一点是,当你在屏幕外画一些东西时,它会自动将屏幕上的内容剪辑出来. (有意义,因此它不会绘制未见的东西)但是当你移动图层时(使用矩阵变换).剪切的路径未显示(缺失).
最后一件事,如果你将一个图层的引用保存到一个变量中,以后再想要绘制它,你可以使用CGContextDrawLayerAtPoint()方法之类的
CGContextDrawLayerAtPoint(ctx,(CGPoint) {newPointX,newPointY},layer);
它会在newPointX和新的PointY坐标上“压印”或“绘制”图层.
我希望能回答你的问题,如果不是,请告诉我.
总结以上是内存溢出为你收集整理的iphone – 如何从UIView创建一个CGLayer用于离屏绘图全部内容,希望文章能够帮你解决iphone – 如何从UIView创建一个CGLayer用于离屏绘图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)