我想预先渲染一些图形到CGLayer中,以便将来快速绘制。
我发现CGLayerCreateWithContext需要一个CGContext参数。在drawRect:方法中可以很容易地找到它。但是我需要在drawRect:之外创建一个CGLayer。我应该在哪里获得CGContext?
我应该简单地创建临时CGBitmapContext并使用它吗?
更新:我需要在drawRect之外创建CGLayer :因为我想在呈现CGLayer之前对其进行初始化。在第一次drawRect调用时初始化一次是可能的,但这对我来说并不是一个很好的解决方案。
发布于 2012-06-27 14:53:42
没有理由在drawRect:之外做这件事,事实上,在内部做有一些好处。例如,如果您更改视图的大小,图层仍将使用正确的大小(假设它基于视图的图形上下文,而不仅仅是任意大小)。这是一种常见的做法,我不认为在外部创建它会有好处。无论如何,大部分CPU周期都会花在CGContextDrawLayer上。
发布于 2016-07-15 03:53:46
你可以通过这个函数来创建它,你可以在render块中渲染你的内容
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
https://stackoverflow.com/questions/11207801
复制相似问题