ユーザーが特定の凡例に触れた場合、そのスライス/バー/プロットの詳細を表示するなど、何らかのアクションをトリガーできるようにしたいと考えています。これ以外にデリゲートメソッドはありますか:
-(NSString *)legendTitleForPieChart:(CPTPieChart *)pieChart recordIndex:(NSUInteger)index
ありがとう!
ユーザーが特定の凡例に触れた場合、そのスライス/バー/プロットの詳細を表示するなど、何らかのアクションをトリガーできるようにしたいと考えています。これ以外にデリゲートメソッドはありますか:
-(NSString *)legendTitleForPieChart:(CPTPieChart *)pieChart recordIndex:(NSUInteger)index
ありがとう!
これは現在、coreplot では利用できません。CPTLegend
この機能を追加するには、クラスをサブクラス化する必要があります。すでにこちらにリクエストがあります。
あなたを正しい方向に向けるだけです。これを達成するには、次のことを行う必要があります。
renderAsVectorInContext
凡例のタイトルとスウォッチが描画される CGRect を格納するメソッドを変更します。凡例のタイトルに対応するフレーム間に接続があるはずです。-(BOOL)pointingDeviceDownEvent:(CPTNativeEvent *)event atPoint:(CGPoint)interactionPoint
、タップが上記で保存されたこれらの CGRect のいずれかにあるかどうかを確認します。ポイントがそのフレーム内にある場合は、デリゲート メソッドを呼び出して、どの凡例がタップされたかを伝える必要があります。他のコアプロット クラスでこのメソッドの同様の実装を確認してください。この場合、タップのポイントがこのフレーム内にあるかどうかを識別するのは、ほぼ同じはずです。Coreplot サブクラスに実装しました。これが私がやったことです(おそらく最良の方法ではありませんが、ここでうまくいきました):
1-CPlot のカテゴリを作成し、CGRect legendRect というプロパティを追加します。
2-プロットの初期化中に、このプロパティを各プロットの CGRectZero として設定します。
3-プロトコル CPTLegendDelegate を追加し、以下のメソッドを実装します。
-(BOOL)legend:(CPTLegend *)legend shouldDrawSwatchAtIndex:(NSUInteger)idx forPlot:(CPTPlot *)plot inRect:(CGRect)rect inContext:(CGContextRef)context
{
if (CGRectEqualToRect(plot.legendRect, CGRectZero)) {
plot.legendRect = CGRectUnion(self.graph.legend.frame, rect);
}
return !plot.hidden;
}
3-プロトコル CPTPlotSpaceDelegate を追加し、以下のメソッドを実装します。
-(BOOL)plotSpace:(CPTPlotSpace *)space shouldHandlePointingDeviceDownEvent:(UIEvent *)event atPoint:(CGPoint)point
{
if (CGRectContainsPoint(self.graph.legend.frame, point)) {
CGPoint pointInLegend = CGPointMake(point.x - self.graph.legend.frame.origin.x, point.y - self.graph.legend.frame.origin.y);
[self.graph.allPlots enumerateObjectsUsingBlock:^(CPTPlot *plot, NSUInteger idx, BOOL *stop) {
if (CGRectContainsPoint(plot.legendRect, pointInLegend))
{
//here you can do whatever you need
plot.hidden = !plot.hidden;
[self configureLegend];
*stop = YES;
}
}];
}
return YES;
}
ユーザーが凡例項目 (スウォッチまたはラベル) に触れると、タッチしたプロットが非表示になります。おそらく、これはコアプロット内で実装できます。
よろしく、アルミール