我希望达到XYplot每20ms刷新一次的目标,每个刷新时间增加5个新点,并在graphview中显示5000个点(xRanage = 5000,yRange = 2048)。
在前1000个点中,刷新速度看起来正常,但在1000点之后,每次刷新事件的刷新速度都会变慢。
虽然我使用inertDataAtIndex:numberOfRecords
来更新数据可以减少运行numberForPlot:field:recordIndex
函数的过程,但我觉得它仍然刷新所有的graphview,而不是逐点绘制。
因此,在1000点之后它仍然缓慢刷新,并且每个输入数据都会降低。
是不是意味着coreplot不适合做快速实时事件?
这是我的代码:
- (IBAction)Refresh:(UIButton *)sender {
timer = [NSTimer scheduledTimerWithTimeInterval:0.02 target:self
selector:@selector(show) userInfo:nil repeats:YES];
}
- (void)show {
for (int i=0; i<5; i++) {
[dataArray addObject:[NSNumber numberWithInt:arc4random()%801+1000]];
[dataArray2 addObject:[NSNumber numberWithInt:arc4random()%601+300]];
}
//[graph reloadData];
[plotLine insertDataAtIndex:[dataArray count]-5 numberOfRecords:5];
[plotLine2 insertDataAtIndex:[dataArray2 count]-5 numberOfRecords:5];
}
- (NSUInteger) numberOfRecordsForPlot:(CPTPlot *)plot {
return [dataArray count];
}
- (NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx {
NSNumber *num;
if (fieldEnum == CPTScatterPlotFieldY) {
if ([(NSString *)plot.identifier isEqualToString:@"line1"])
num = [dataArray objectAtIndex:idx];
else if ([(NSString *)plot.identifier isEqualToString:@"line2"])
num = [dataArray2 objectAtIndex:idx];
}else{
num = [NSNumber numberWithInt:idx];
}
return num;
}
答案 0 :(得分:1)
您使用什么设备来显示此图表? Mac还是iOS?即使是Retina MacBook Pro在屏幕上的像素也不到3000像素,因此您要做的第一件事就是减少绘制的点数。你还有两个独立的情节,这使得一切都需要两倍的时间。
绘图的显示格式(线条样式,区域填充,绘图符号等)也有很大的不同。简化并消除您不需要的元素(将相应的属性设置为nil
)。尝试不同的设置并测量结果。
将alignsPointsToPixels
设置为NO
以节省一些时间,使每个绘图点与像素网格对齐。对于快速变化的数据的实时显示,没有人会注意到。