1

このサイトで同様の質問を見つけ、いくつかの方法を試しましたが、成功しませんでした。

どのシンボルが選択されたかを正確に確認するために、プロットシンボルを選択すると色が変わるようにします。CPTTestApp(Core Plot examplesフォルダー内)を調べて例を確認し、このサイトに表示されている内容から、カスタムシンボルを返すかどうかを決定するために、プロットパラメーターを操作する必要があります。しかし、このプロットパラメータが何であるかはわかりません。

シンボルの色を変更するために、どのシンボルが選択されたかをどのように検出できますか?インデックスを使用して?

この方法の使い方に少し混乱してすみません。私は研究をしました、そして私は続けます、しかし多分誰かが考えを持っています。

期待される結果が得られるメソッドsymbolForScatterPlotを見つけましたが、selectedIndex変数が何であるか、どのように宣言するか、他にどこで使用するかがわかりません。ここからこのメソッドを使用しました。さまざまなポイントのCPScatterPlotのラインスタイルを変更する と、次のようになります。

 - (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;
}
4

1 に答える 1

6

質問は2つの部分に分かれているようです。最初に選択したポイントを特定し、次にその色を変更します。

選択したポイントを見つけるには、タッチイベントを検出するために、CPTScatterPlotインスタンスのデリゲートを設定する必要があります。(ここでcurrentPlotは私のCPTScatterPlotインスタンスです)

currentPlot.delegate                        = self;
currentPlot.plotSymbolMarginForHitDetection = 10.0f;

2行目は、タッチイベントの検出に一定のマージンを有効にします。この値は任意に選択されます。私の場合は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を呼び出すことです。

于 2013-02-01T14:33:24.300 に答える