0

我想预渲染一些图形CGLayer以便将来快速绘图。

我发现CGLayerCreateWithContext需要一个CGContext参数。在drawRect:方法中很容易找到。但我需要创建一个CGLayer外部的drawRect:. 我应该去哪里CGContext

我应该简单地创建临时CGBitmapContext并使用它吗?

更新:我需要在 drawRect 之外创建 CGLayer:因为我想在渲染之前初始化 CGLayer。可以在第一次 drawRect 调用时初始化一次,但这对我来说不是一个漂亮的解决方案。

4

2 回答 2

0

没有理由在外面做drawRect:,事实上在里面做也有一些好处。例如,如果您更改视图的大小,图层仍然会以正确的大小制作(假设它基于您的视图的图形上下文,而不仅仅是任意大小)。这是一种常见的做法,我认为在外部创建它不会有任何好处。CGContextDrawLayer无论如何,大部分 CPU 周期都将被花费。

于 2012-06-27T06:53:41.973 回答
0

你可以通过这个函数创建它,你可以在渲染块中渲染你的内容

typedef void (^render_block_t)(CGContextRef);

- (CGLayerRef)rendLayer:(render_block_t) block {
    UIGraphicsBeginImageContext(CGSizeMake(100, 100));
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGLayerRef cgLayer = CGLayerCreateWithContext(context, CGSizeMake(100, 100), nil);
    block(CGLayerGetContext(cgLayer));
    UIGraphicsEndImageContext();
    return cgLayer;
}

我前几天写的。我用它在可变线程中绘制一些 UIImages。您可以在https://github.com/PengHao/GLImageView/上下载代码, 文件路径为 GLImageView/GLImageView/ImagesView.m

于 2016-07-14T19:53:46.450 回答