我希望达到这样的目标: XYplot可以每20ms刷新一次,每次刷新时添加5个新点,并在图形视图中显示5000个点(xRanage= 5000,yRange = 2048)。
在前1000个点,刷新速度看起来很正常,但在1000个点之后,每个刷新事件的刷新速度都会变慢。
虽然我使用inertDataAtIndex:numberOfRecords更新数据可以减少程序运行numberForPlot:field:recordIndex函数的次数,但我感觉它还是刷新了所有的图视图,而不是逐点绘制。
因此,在1000个点之后,它仍然缓慢刷新,并随着输入数据的减少而降低。
这是不是意味着核心图不适合做快速实时事件?
这是我的代码:
- (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;
}发布于 2014-05-27 00:02:06
您使用什么设备来显示此图表?Mac还是iOS?即使是Retina MacBook Pro在屏幕上的像素也不到3,000,因此您可以做的第一件事就是减少绘制的点数。你也有两个独立的图,这使得所有的事情都需要两倍的时间。
打印的显示格式(线条样式、区域填充、打印符号等)也有很大的不同。简化并消除不需要的元素(将相应的属性设置为nil)。尝试不同的设置并测量结果。
将alignsPointsToPixels设置为NO可节省将每个绘图点与像素网格对齐所花费的时间。对于快速变化的数据的实时显示,没有人会注意到。
https://stackoverflow.com/questions/23871358
复制相似问题