Основной сюжетный вопрос: как добавить индикатор данных

я хочу добавить строку индикатора данных, подобную следующему изображению в основном графике.

Изображение графика http://img203.imageshack.us/img203/9412/plota.png

Любая идея, как я могу добиться этого, используя основной сюжет. Я только начал разбираться в сюжетной линии, так что любой совет будет очень полезен.

Спасибо

Изменить:

Для лучшего понимания я создал скринкаст, чтобы показать, что я имею в виду:

http://www.screencast.com/users/GauravVerma/folders/Jing/media/78fbef04-8785-46d6-9347-4f35d257109c

Добавлено 26 февраля:

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

http://www.screencast.com/users/GauravVerma/folders/Jing/media/02a1e685-8bf8-41a9-aaa6-5ea6445f6a6c

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

Вот мои методы источника данных (может помочь кому-то):

-(NSUInteger)numberOfRecordsForPlot:(CPPlot *)plot {
    if ([(NSString *)plot.identifier isEqualToString:@"Blue Plot"]){
        return [dataForPlot count];
    }else {
        return 1;
    }

}

-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index 
{
    if ([(NSString *)plot.identifier isEqualToString:@"Green Plot"]) {
        index = floor((double)[slider value]);
        if (index > [dataForPlot count] -1) {
            index = [dataForPlot count] -1;
        }
        NSLog(@"Green plot index : %f",index);
    }
    NSNumber *num = [[dataForPlot objectAtIndex:index] valueForKey:(fieldEnum == CPScatterPlotFieldX ? @"x" : @"y")];
    num = [NSNumber numberWithDouble:[num doubleValue] + 1.0];
    return num;
}

Теперь остается только найти простой способ провести линию. Есть идеи??


person Gaurav Verma    schedule 24.02.2010    source источник
comment
Какой элемент изображения, которое вы показываете, является индикатором данных?   -  person Barry Wark    schedule 24.02.2010
comment
красная линия, которая показывает текущее значение. Когда пользователь перемещает ползунок, красная линия также перемещается, показывая текущее значение вверху. Для реализации посмотрите представление Cardex для приложения Roambi (roambi.com)   -  person Gaurav Verma    schedule 25.02.2010


Ответы (1)


На самом деле пока нет прямого способа сделать этот тип взаимодействия в самом Core Plot, хотя это планируется включить в будущем.

Один из способов сделать это — поместить собственный UIView поверх графика и использовать его для получения событий перемещения мыши.

Затем у вас может быть несколько вариантов отображения красной линии:

1) Добавьте вторую ось Y и расположите ее в соответствии с событиями мыши.

2) Добавьте гистограмму ровно с одной полосой, охватывающей все вертикальное пространство.

3) Добавьте точечную диаграмму с двумя точками, одной внизу и одной вверху.

Это все хаки, но все они должны работать.

person Drew McCormack    schedule 27.02.2010
comment
можете ли вы немного рассказать об этом и о том, как обнаруживать события касания на графике, поскольку он не поддерживается. - person ; 21.06.2011
comment
Этот ответ теперь довольно старый. Теперь у нас есть некоторая поддержка обработки событий в Core Plot. В классе CPTPlotSpace есть несколько методов делегата, которые позволяют получать события. Просто установите делегат пространства графика и реализуйте методы для обновления положения вашей красной линии. - person Drew McCormack; 24.06.2011