Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用核心图形命令实现自定义CALayer子类绘制_Objective C_Uiview_Core Graphics_Calayer - Fatal编程技术网

Objective c 使用核心图形命令实现自定义CALayer子类绘制

Objective c 使用核心图形命令实现自定义CALayer子类绘制,objective-c,uiview,core-graphics,calayer,Objective C,Uiview,Core Graphics,Calayer,我正在实现一个UIview,其中包含许多层(大约9层),用于实时绘制图形的不同元素。我以前将它们实现为9个不同的UIView,并使用drawRect()函数对它们进行了绘制,效果很好。。。但是速度很慢。从我在网上找到的资料来看,CALayers似乎要快得多。要进行此更改,我已经对CALayer进行了子类化,并且只重写了drawinContext:函数。这是我的CALayer.m文件的全部内容 #import "FFTLayer.h" @implementation FFTLayer @synth

我正在实现一个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];
您是否在视图子类中导入了“FFTlayer.h”

尝试在层初始化之后添加:

fftLayer.delegate = fftLayer;

你能展示一下你是如何设置你的主视图和它的所有Fftlayer的吗?你在哪里创建它们?在何处将它们添加到主视图图层?