我在这个网站上发现了类似的问题,我尝试了一些方法,但是我没有成功。
我希望绘图符号在选中时更改其颜色,以便准确查看选择了哪个符号。我查看了CPTTestApp(在Core Plot示例文件夹中),查看示例,从我在本网站上看到的内容,我必须使用plot参数,以决定是否返回自定义符号。但我不知道这个情节参数是什么。
如何检测选择了哪个符号,以便更改它的颜色?通过使用索引?
很抱歉对如何使用此方法感到有点困惑。我做了研究,我会继续,但也许有人有想法。
我找到了一个方法symbolForScatterPlot,它应该给我预期的结果,但我不知道selectIndex是什么变量,我应该如何声明它以及在哪里使用它。我从这里采用了这种方法Change line style of CPScatterPlot for different points 它看起来像这样:
- (CPPlotSymbol *)symbolForScatterPlot:(CPScatterPlot *)plot recordIndex:(NSUInteger)index
{
CPMutableLineStyle *symbolLineStyle = [CPMutableLineStyle lineStyle];
symbolLineStyle.lineColor = [CPColor blackColor];
CPPlotSymbol *plotSymbol = [CPPlotSymbol ellipsePlotSymbol];
plotSymbol.lineStyle = symbolLineStyle;
if (_selectedIndex != NSNotFound && index == _selectedIndex)
{
plotSymbol.symbolType = CPPlotSymbolTypeDiamond;
plotSymbol.size = CGSizeMake(12, 12);
plotSymbol.fill = [CPFill fillWithColor:[CPColor redColor]];
}
else
{
plotSymbol.symbolType = CPPlotSymbolTypeEllipse
plotSymbol.size = CGSizeMake(8, 8);
plotSymbol.fill = [CPFill fillWithColor:[CPColor greenColor]];
}
return plotSymbol;
}
答案 0 :(得分:6)
看起来您的问题分为两部分:首先找到所选的点,然后更改它的颜色。
要查找选定的点,您必须为CPTScatterPlot实例设置委托以检测触摸事件。 (这里currentPlot是我的CPTScatterPlot实例)
currentPlot.delegate = self;
currentPlot.plotSymbolMarginForHitDetection = 10.0f;
第二行为检测触摸事件启用了一定的余量。这个值是任意选择的,10在我看来很好看。
然后你可以添加方法plotSymbolWasSelectedAtRecordIndex,它将在选择一个点后被调用:index参数是所选点的索引。
-(void)scatterPlot:(CPTScatterPlot *)plot plotSymbolWasSelectedAtRecordIndex:(NSUInteger)index
{
selectedIndex = index;
// do some other stuff, adding a label for example
[plot reloadData];
}
由于现在找到了所选的点,您可以使用您链接的函数(不要忘记设置CPTScatterPlot实例的数据源)来重绘绘图。重新加载CPTScatterPlot实例时,将为绘图的每个索引调用此函数。诀窍是,如我的代码示例所示,在您选择一个点时调用reloadData。