我正在實現一個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];
,你可以告訴你如何設置你與所有FFTLayers主視圖?你在哪裏創建它們?你將它們添加到你的主視圖層? – sergio