Как я могу изменить значения на BarChart динамически в Core-Plot iphone? - PullRequest
1 голос
/ 26 декабря 2011

Я использую библиотеку Core-Plot для рисования гистограммы в iPhone. Я использую CPTTestApp-iPhone для обучения. В моем проекте панель выглядит очень хорошо, как в примере проекта. Но мне не нужно указывать значения для рисования баров. Затем в моем реальном проекте мне нужно динамически изменять значения бара. Как я могу это сделать? Пожалуйста, помогите мне найти решение. Заранее спасибо. Ниже примера кода источника данных,

#pragma mark -
#pragma mark Plot Data Source Methods

-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot 
{
    return 10;
}

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index 
{
    NSDecimalNumber *num = nil;
    if ( [plot isKindOfClass:[CPTBarPlot class]] ) 
    {
        switch ( fieldEnum ) 
        {
            case CPTBarPlotFieldBarLocation:
                num = (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:index];
                break;
            case CPTBarPlotFieldBarTip:
                num = (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:(index+1)*(index+1)];
                if ( [plot.identifier isEqual:@"Bar Plot 2"] ) 
                    num = [num decimalNumberBySubtracting:[NSDecimalNumber decimalNumberWithString:@"10"]];//10
                break;
        }
    }

    return num;
}

-(CPTFill *) barFillForBarPlot:(CPTBarPlot *)barPlot recordIndex:(NSNumber *)index; 
{
    return nil;
}

Как увеличить длину полосы в Coreplot iPhone? Спасибо.

1 Ответ

3 голосов
/ 27 декабря 2011

График основного графика будет запрашивать свои данные у источника данных при его первом отображении. Вы можете заставить его загружать новые данные несколькими способами:

  1. Вызовите -reloadData на графике, чтобы перезагрузить все графики.
  2. Назовите -reloadData на графике, чтобы перезагрузить все данные только для этого графика.
  3. Вызовите -reloadDataInIndexRange: на графике, чтобы перезагрузить диапазон индексов данных без изменения общего количества точек данных.
  4. Вызовите -insertDataAtIndex:numberOfRecords:, чтобы вставить новые данные по указанному индексу. Любые данные с более высокими индексами будут перемещены, чтобы освободить место. Из источника данных будут запрашиваться только новые данные.

Вы также можете удалить данные с графика без перезагрузки, используя метод -deleteDataInIndexRange:.

Как следует из названия, метод -numberOfRecordsForPlot: сообщает графику, сколько точек данных будет нанесено. Для загрузки актуальных значений данных будет вызван метод -numberForPlot:field:recordIndex:. Он вызывается для каждой комбинации поля (местоположение и подсказка) и индекса данных.

...