1

私はこれに数日間取り組んできましたが、かなり困惑しています。ユーザーがデータポイントを押して座標を取得できるように、コアプロットでグラフを作成しようとしています。線形グラフを作成するだけのサンプルアプリを作成しました。私の問題は、タッチ機能を動作させることができないことです。コアプロットの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でコアプロットの質問の多くを読みましたが、私の状況で役立つものを見つけることができません。前もって感謝します。

4

1 に答える 1

1

これをフォローしている人のために。私は最初にEricSkrochのすべての助けに感謝したいと思います、もう一度!!!! しかし、私はついに自分が間違っていることに気づきました。私はviewControllerをプロットデリゲートにしましたが、プロットを作成しているときはそうは言いませんでした。linearGraph.delegate=self;を追加しました。そして今、plotSymbol ...メソッドが呼び出されます!@EricSkrochに感謝します。

于 2012-09-17T15:14:24.997 に答える