Тестирование попадания в заговор CorePlot - PullRequest
0 голосов
/ 18 октября 2011

У меня вопрос по поводу 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;
}

1 Ответ

0 голосов
/ 19 октября 2011

Я не совсем уверен, что именно вы пытаетесь проверить, но вы смешиваете системы координат. Точка, переданная методу делегата пространства графика, находится в представлении координат слоя области графика. Вы преобразуете его в систему координат всего слоя графа, а затем проверяете точку на пространстве графика данные координаты.

Пространство графика определяет отображение между данными и областью графика на экране. location из xRange соответствует левому краю области графика, а его конечная точка (location + length) соответствует правому краю. Точно так же location из yRange соответствует нижнему краю области графика, а его конечная точка соответствует верхнему краю. Обратите внимание, что диапазоны графиков могут иметь отрицательную длину, что означает, что координата данных конечной точки может быть меньше начальной позиции.

...