0

我正在实现一个 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];
4

1 回答 1

0

您是否在视图子类中导入了“FFTlayer.h”?

尝试在层初始化后添加:

fftLayer.delegate = fftLayer;
于 2013-10-06T06:56:09.817 回答