2013-10-04 30 views
0

我正在实现一个UIview包含若干图层(约9)以实时绘制图形的不同元素。我以前实现这些作为9个不同的UIViews,并使用drawRect()函数绘制它们,它工作得很好......但非常缓慢。从我在网上找到的东西看来,CALayers似乎要快得多。为了做出这个改变,我已经分类了CALayer,并且只覆盖了drawinContext:函数。这里是我的CALayer.m的全部文件实现自定义CALayer子类来绘制核心图形命令

#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

,你可以告诉你如何设置你与所有FFTLayers主视图?你在哪里创建它们?你将它们添加到你的主视图层? – sergio

回答

0

你在你的视图子类导入“FFTlayer.h”?

尽量层初始化后,添加:

fftLayer.delegate = fftLayer;