Основной сюжет Вопрос: Как добавить индикатор данных - PullRequest
6 голосов
/ 24 февраля 2010

Я хочу добавить строку индикатора данных, подобную следующей картинке в core-plot.

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

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

Спасибо

Редактировать:

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

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;
}

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

1 Ответ

6 голосов
/ 27 февраля 2010

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

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

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

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

2) Добавить гистограмму с ровно одной полосой, которая распространяется на все вертикальное пространство

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

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

...