我有一个成功绘制的散点图。我有一个自定义对象的 NSArray,每个对象都包含注释名称、x 值、y 值、符号颜色、符号形状。当我加载图表时它工作正常。当我单击我使用的表格中的行时,我可以隐藏点并立即更改颜色/形状。但是,在我改变形状之前,颜色不会改变。我知道正在调用重新加载数据,我知道正在调用 symbolForScatterPlot,我也知道我给 plotSymbol.fill = [CPTFill fillWithColor:[point getColor]]; 实际上是新颜色,但它不会改变!
这是代码:
else if ([self.state isEqualToString:@"settings"]) {
if (self.current == -1) {
// all stats
if ([indexPath section] == 0) {
for (int k = 0; k < 32; k ++) {
[[theData sharedInstance] setTheColor:tmp index:k];
}
} else {
for (int k = 0; k < 32; k ++) {
[[theData sharedInstance] setTheShape:tmp index:k];
}
}
} else {
// individual stats
if ([indexPath section] == 1) {
[[theData sharedInstance] setTheShape:tmp index:self.current];
} else {
[[theData sharedInstance] setTheColor:tmp index:self.current];
}
}
[[NSNotificationCenter defaultCenter] postNotificationName:@"updated" object:nil];
}
这导致:
-(void)performTask {
[self.hostView.hostedGraph reloadData];
NSLog(@"updated!");
}
和符号代码:
- (CPTPlotSymbol *)symbolForScatterPlot:(CPTScatterPlot *)plot recordIndex:(NSUInteger)index
{
CPTPlotSymbol *plotSymbol;
DataPoint *point = [[[theData sharedInstance] getData:@"dataPoint"] objectAtIndex:index];
plotSymbol = [point getShape];
plotSymbol.fill = [CPTFill fillWithColor:[CPTColor whiteColor]];
NSLog(@"the fill color is %@", [point getColor]);
if ([point getPointOn]) {
float var = [[[[theData sharedInstance] getData:@"dataPoint"]objectAtIndex:index] getStats:2005];
plotSymbol.size = CGSizeMake(var/2, var/2);
}
plotSymbol.fill = [CPTFill fillWithColor:[point getColor]];
return plotSymbol;
}
老实说,我不知道为什么颜色不会更新。哦,当从服务器重新下载数据并重新加载图表时,颜色也会改变,而形状不会改变。
编辑:正如您在代码中看到的那样,我在形状之后立即将其设置为白色,但是它不是绘制为白色,而是绘制为默认颜色,这让我更加困惑:/