私はこれに数日間取り組んできましたが、かなり困惑しています。ユーザーがデータポイントを押して座標を取得できるように、コアプロットでグラフを作成しようとしています。線形グラフを作成するだけのサンプルアプリを作成しました。私の問題は、タッチ機能を動作させることができないことです。コアプロットのWebサイトで多くのプロットを参照しましたが、アプリで機能させることができません。これが私がしたことです。
ヘッダーで、プロパティCPTPlotSpaceAnnotation*annotationを作成しました。また、インターフェイスViewController:UIViewControllerを使用しました。
私の実装では、アノテーションを合成しました。ViewDidAppearメソッドで、CGPointMakeを使用してデータ配列を作成しました。
NSMutableArray *linearstuff = [NSMutableArray array];
for (int i = 0; i < 100; i ++)
{
float y = (b * (l)) + c;
[linearstuff addObject:[NSValue valueWithCGPoint:CGPointMake(l, y)]];
l = l + inc;
}
self.data = linearstuff;
[self initPlot];
私のメソッドinitPlotはグラフを構成し、いくつかのconfigureメソッドがあります。したがって、configurePlotsと呼ばれるメソッドで、linearGraphと呼ばれるCPTScatterPlotを割り当てて初期化します。そのメソッドでもlinearGraph.plotSymbolMarginForHitDetectionを使用しました。そして、plotSymbolWasSelectedAtRecordIndexに対して、次のことを行いました。
- (void)scatterPlot:(CPTScatterPlot *)plot plotSymbolWasSelectedAtRecordIndex:(NSUInteger)index
{
NSLog(@"touch");
CPTGraph *graph = self.hostView.hostedGraph;
if (_annotation)
{
[graph.plotAreaFrame.plotArea removeAnnotation:_annotation];
_annotation = nil;
}
CPTMutableTextStyle *annotationTextStyle = [CPTMutableTextStyle textStyle];
annotationTextStyle.color = [CPTColor whiteColor];
annotationTextStyle.fontSize = 16.0f;
annotationTextStyle.fontName = @"Helvetica-Bold";
NSValue *value = [self.data objectAtIndex:index];
CGPoint point = [value CGPointValue];
NSString *number1 = [NSString stringWithFormat:@"%.2f", point.x];
NSString *number2 = [NSString stringWithFormat:@"%.2f", point.y];
NSLog(@"x and y are, %.2f, %.2f", point.x, point.y);
NSLog(@"number1 and number2 are, %.2f, %.2f", point.x, point.y);
NSNumber *x = [NSNumber numberWithFloat:point.x];
NSNumber *y = [NSNumber numberWithFloat:point.y];
NSArray *anchorPoint = [NSArray arrayWithObjects: x, y, nil];
NSString *final = [number1 stringByAppendingString:number2];
NSLog(@"final is %@",final);
CPTTextLayer *textLayer = [[CPTTextLayer alloc] initWithText:final style:annotationTextStyle];
_annotation = [[CPTPlotSpaceAnnotation alloc] initWithPlotSpace:graph.defaultPlotSpace anchorPlotPoint:anchorPoint];
_annotation.contentLayer = textLayer;
_annotation.displacement = CGPointMake(0.0f, 0.0f);
[graph.plotAreaFrame.plotArea addAnnotation:_annotation];
}
私はコアプロットのウェブサイトで見たものをフォローしようとしました。配列を取得してインデックスを取得しました。これらの値をNSNumberに配置して、注釈の文字列を作成しました。ただし、グラフには表示されません。私が間違ったことを誰かが知っていますか?任意の洞察をいただければ幸いです。私はここSOでコアプロットの質問の多くを読みましたが、私の状況で役立つものを見つけることができません。前もって感謝します。