首先,如果您是在 iOS 环境中执行此操作,我认为您是对的。该文档明确指出,获得CGContextRef
is by
CGContextRef ctx = UIGraphicGetCurrentContext();
然后您使用该上下文来创建CGLayer
with
CGLayerRef layer = CGLayerCreateWithContext(ctx, (CGSize){0,0}, NULL);
如果您想在该图层上绘制,则必须使用从该图层获得的上下文来绘制它。 (它与您之前创建 CGLayer 时传入的上下文有些不同)。我猜测CGLayerCreateWithContext
保存它可以从传入的上下文中获取的信息,但不是所有信息。 (示例之一是 ColorSpace 信息,当您使用上下文填充某些内容时,必须重新指定CGLayer
).
您可以从以下位置获取 CGLayer 上下文引用CGLayerGetContext()
函数并用它来绘图。
CGContextRef layerCtx = CGLayerGetContext(layer);
CGContextBeginPath(layerCtx);
CGContextMoveToPoint(layerCtx, -10, 10);
CGContextAddLineToPoint(layerCtx, 100, 10);
CGContextAddLineToPoint(layerCtx, 100, 100);
CGContextClosePath(layerCtx);
我发现的一点是,当您在屏幕外绘制某些内容时,它会自动将其剪辑到屏幕外。 (有道理,所以它不会绘制看不见的东西)但是当您移动图层时(使用矩阵变换)。剪切路径未显示(丢失)。
最后一件事,如果将对图层的引用保存到变量中,稍后想要绘制它,则可以使用CGContextDrawLayerAtPoint()
方法就像
CGContextDrawLayerAtPoint(ctx, (CGPoint) {newPointX, newPointY}, layer);
它将在该 newPointX 和新 PointY 坐标处“标记”或“绘制”图层。
我希望能回答您的问题,如果没有请告诉我。