2013-01-03 45 views
1

我在这个网站上发现了类似的问题,我尝试了一些方法,但没有成功。如何在选中时更改剧情符号的颜色iPhone

我希望绘图符号在选择时改变它的颜色,以便准确地看到选择了哪个符号。我查看了CPTTestApp(在Core Plot示例文件夹中),查看示例以及我在本网站上看到的内容,我必须使用plot参数来决定是否返回自定义符号。但我不知道这个plot参数是什么。

如何检测选择了哪个符号,以便更改其颜色?通过使用索引?

对不起,如何使用这种方法有点困惑。我做了研究,我会继续,但也许有人有一个想法。

我发现了一个方法symbolForScatterPlot应该给我预期的结果,但我不知道什么变量selectedIndex是以及我应该如何声明它以及在哪里使用它。我从这里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; 
} 

回答

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。

+0

谢谢!我很开心,因为它有效。 :)之前没有工作,因为我没有在plotSymbolWasSelectedAtRecordIndex中初始化selectedIndex。 ;) –

+0

很高兴帮助:) –

相关问题