Тестирование попаданий сюжета 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;
}

person Dmitry    schedule 18.10.2011    source источник


Ответы (1)


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

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

person Eric Skroch    schedule 19.10.2011
comment
Хорошо, спасибо за ваш ответ. Может быть, мне следует объяснить, чего я хочу. Моя задача - проверить, не нажал ли пользователь на кривую. Я хочу решить задачу без символов. - person Dmitry; 19.10.2011
comment
Какая кривая? Сюжетная линия или что-то еще? - person Eric Skroch; 20.10.2011