2013-10-04 35 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;