Objective c 使用核心图形命令实现自定义CALayer子类绘制
我正在实现一个UIview,其中包含许多层(大约9层),用于实时绘制图形的不同元素。我以前将它们实现为9个不同的UIView,并使用drawRect()函数对它们进行了绘制,效果很好。。。但是速度很慢。从我在网上找到的资料来看,CALayers似乎要快得多。要进行此更改,我已经对CALayer进行了子类化,并且只重写了drawinContext:函数。这是我的CALayer.m文件的全部内容Objective c 使用核心图形命令实现自定义CALayer子类绘制,objective-c,uiview,core-graphics,calayer,Objective C,Uiview,Core Graphics,Calayer,我正在实现一个UIview,其中包含许多层(大约9层),用于实时绘制图形的不同元素。我以前将它们实现为9个不同的UIView,并使用drawRect()函数对它们进行了绘制,效果很好。。。但是速度很慢。从我在网上找到的资料来看,CALayers似乎要快得多。要进行此更改,我已经对CALayer进行了子类化,并且只重写了drawinContext:函数。这是我的CALayer.m文件的全部内容 #import "FFTLayer.h" @implementation FFTLayer @synth
#import "FFTLayer.h"
@implementation FFTLayer
@synthesize strokeColor,points,numPoints;
-(void)display{
[self drawInContext:UIGraphicsGetCurrentContext()];
NSLog(@"displaying!!");
[super display];
}
-(void)drawInContext:(CGContextRef)ctx
{
NSLog(@"drawing in context!");
CGContextSetStrokeColorWithColor(ctx, strokeColor);
CGContextStrokeLineSegments(ctx, points, numPoints*2);
}
@end
我试过很多不同的方法。但到目前为止,我能够得到drawInContext:的唯一方法是在display()方法中调用它,这似乎是错误的。即使在调用drawInContext时,Xcode也会告诉我我的绘图上下文无效。下面是我用来告诉FFTlayer自己调用的代码
context = UIGraphicsGetCurrentContext();
[self.layer addSublayer:fftLayer];
[fftLayer setPoints:fft_points];
[fftLayer drawInContext:context];
[fftLayer setNeedsDisplay];
[self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];
即使花了几天的时间在网上阅读CALAyers,我仍然对如何正确使用它们感到困惑,如果我用最有效/正确的方式来绘制它们的话。如果你不能从“FFTLayer”类名中分辨出来,我是一个音频人,而不是一个图形人:)
任何帮助都将不胜感激
编辑:
我用下面的方法设置我的所有图层
//FFT Graph Layer
fftLayer = [[FFTLayer alloc] init];
fftLayer.backgroundColor = [UIColor clearColor].CGColor;
fftLayer.frame = self.layer.bounds;
[fftLayer setNumPoints:nP];
[fftLayer setStrokeColor:fft_strokeColor];
您是否在视图子类中导入了“FFTlayer.h”
尝试在层初始化之后添加:
fftLayer.delegate = fftLayer;
你能展示一下你是如何设置你的主视图和它的所有Fftlayer的吗?你在哪里创建它们?在何处将它们添加到主视图图层?