2011-10-18 3 views
0

CorePlotについて質問があります。私の質問は: 私は曲線を描いています。次の作業はカーブ選択です。 私はハンドラを追加しました:CorePlotプロットヒットテスト

しかし、それは動作しません。 アイデアおかげさまで

- (BOOL)npvCurveContainPoint:(CGPoint)point 
{ 
    if ([[graph allPlots] count] == 0) { 
     return NO; 
    } 
    CPTPlot* plot = [graph plotAtIndex:0]; 
    BOOL xContains = [[plot plotRangeForCoordinate:CPTCoordinateX] containsDouble:point.x]; 
    BOOL yContains = [[plot plotRangeForCoordinate:CPTCoordinateY] containsDouble:point.y]; 
    if (xContains && yContains) { 
     return YES; 
    } 
    return NO; 
} 

#pragma mark - Plot Space Delegate Methods 
- (BOOL)plotSpace:(CPTPlotSpace*)space shouldHandlePointingDeviceDownEvent:(id)event atPoint:(CGPoint)point 
{ 
    CGPoint pointInPlotArea = [graph convertPoint:point fromLayer:graph.plotAreaFrame]; 
    if ([self npvCurveContainPoint:pointInPlotArea]) { 
     NSLog(@"Curve is selected!!!"); 
    } 
    return NO; 
} 

答えて

0

あなたがテストしようとしているものは正確にはわかりませんが、座標系をミックスしています。プロットスペースデリゲートメソッドに渡されるポイントは、ビューのプロットエリアレイヤの座標です。それをグラフレイヤ全体の座標系に変換し、プロットスペースデータの座標に対してポイントをテストします。

プロットスペースは、データと画面上のプロットエリアとの間のマッピングを定義します。 xRangelocationはプロット領域の左端に対応し、その終点(location + length)は右端に対応します。同様に、yRangelocationはプロット領域の下端に対応し、その端点は上端に対応する。プロット範囲は負の長さを持つことができます。つまり、終点のデータ座標は開始位置よりも小さくなる可能性があります。

+0

ご回答ありがとうございます。たぶん、私が欲しいものを説明する必要があります。 私の仕事は、ユーザーがカーブをタップしていないかどうかをチェックしています。私はシンボルなしで課題を解決したい。 – Dmitry

+0

どのようなカーブですか?プロットライン、または何か他の? –