我正在实现一个UIview来包含多个图层(大约9个),以实时绘制图形的不同元素。我之前已经将它们作为9个不同的UIView实现了,并使用drawRect()函数绘制它们并且它工作得很好......但是非常慢。从我在网上找到的内容来看,似乎CALayers会更快。为了进行此更改,我已经将CALayer子类化,并且只覆盖了drawinContext:函数。这是我的CALayer.m文件的全部内容
#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];
答案 0 :(得分:0)
您是否在视图子类中导入了“FFTlayer.h”?
尝试在图层初始化后添加:
fftLayer.delegate = fftLayer;