0

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

1 に答える 1

0

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

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

于 2011-10-19T00:57:26.700 に答える