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 回答