Core-Plot Mac: показать метку при наведении курсора на график - PullRequest
1 голос
/ 27 февраля 2012

Я создаю приложение Mac OSX с хорошим графиком, созданным с помощью Core-Plot. Это линейный график (диаграмма рассеяния) с несколькими точками на нем, визуализированном с помощью круга с изображением. Моя цель - отобразить метку со значением точки, когда пользователь наводит курсор мыши на точку на графике.

Я уже добавил NSTracking к графику, и это работает, но я заблудился в том, как перевести точку / график точки графика в координаты, поэтому я знаю, когда она прокручивает точку и показывает метку.

У кого-нибудь есть идея? Спасибо всем

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Вы можете использовать метод -indexOfVisiblePointClosestToPlotAreaPoint:, чтобы узнать, какой символ графика ближе всего к определенному пикселю. Этот метод возвращает индекс источника данных точки; вы можете просмотреть исходные данные, предоставленные вашим источником данных, чтобы получить фактические значения. Свойство plotSymbolMarginForHitDetection определяет, насколько близко точка должна быть к данной точке, прежде чем она будет зарегистрирована как попадание.

1 голос
/ 27 февраля 2012

Мое решение будет выглядеть примерно так:

(Я предполагаю, что на графике не отображаются метки. Метки отображаются только тогда, когда мышь находится над точкой на графике.)

В месте, где вы обрабатываете логику мыши, вы должны сделать:

    NSDecimalNumber *tickLocation = [NSDecimalNumber numberWithDouble:"The relevant axis value of the object you have the mouse over"];
    NSString *labelText = @"The text of the label";
    NSMutableArray *customLabels = [NSMutableArray arrayWithCapacity:1];
    CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithText: labelText textStyle:axisSet."Whatever axis you want -X/Y".labelTextStyle];
    label.tickLocation = [tickLocation decimalValue];
    label.offset = axisSet."Whatever axis you want -X/Y".labelOffset + axisSet."Whatever axis you want -X/Y".majorTickLength;
    label.rotation = M_PI/4;
    [customLabels addObject:label];
    axisSet."Whatever axis you want -X/Y".axisLabels =  [NSSet setWithArray:customLabels];

Надеюсь, это поможет.

...