2017-02-15 1 views
0

Я использую следующее: Core Plot 2.2, Xcode 7.3.1, iOS 8.3 и Objective-C.Core Plot - динамический линейный график - чертеж линии всегда начинается с (0,0)

В настоящее время я могу принимать данные о входном напряжении из модуля Cypress BLE и хранить точки данных в NSMutableArray *voltageData. Я использую эти точки как значения на оси y в методе делегата numberForPlot:field:recordIndex:. У меня есть объект NSTimer, который вызывает вызов метода, который фиксирует данные напряжения каждые 0,1 мс. Вот этот метод:

// kMaxDataPoints = 50; 
// '_real' is the voltage data of type Float32 

- (void)incomingData:(nonnull NSTimer *)theTimer { 

    if (self.plotData.count >= kMaxDataPoints) { 
     [self.plotData removeAllObjects]; 
     [self.plot deleteDataInIndexRange:NSMakeRange(0, kMaxDataPoints)]; 
     [self.voltageData removeAllObjects]; 
     self.currentIndex = -1; 
    } 

    self.currentIndex++; 
    if (self.voltageData == nil) { 
     self.voltageData = [[NSMutableArray alloc] init]; 
    } 

    [self.voltageData addObject:[NSNumber numberWithFloat:_real]]; 
    [self.plotData addObject:@(_real)]; 
    [self.plot insertDataAtIndex:(self.plotData.count - 1) numberOfRecords:1]; 
} 

Мои изменяемые массивы voltageData и plotData всегда имеют правильные значения. Каждый раз, когда график достигает конца точек данных, он «перезапускается» при правильном значении напряжения, но строка данных «прикрепляется» к другой прямой, исходящей из начала координат (0,0). Представьте себе эту прямую линию, вычерчивающую строку данных ... вот как она выглядит.

И идеи относительно того, что происходит? Как замечание, я не заменяю ни одной точки другим. Я удаляю все точки из массивов и очищаю весь участок, прежде чем снова перезапустить.

ответ

0

Звоните -reloadData на участок вместо -deleteDataInIndexRange:. Это гарантирует, что все старые данные графика будут удалены.

+0

Это фиксировало «рисование линии из (0,0) источника», но, к сожалению, теперь (заменив '-deletDataInIndexRange:' на '-reloadData' на' self.plot'), где когда-либо моя последняя точка было до достижения максимальных точек, прямая линия следует за линией данных, когда она перемещается слева направо (по мере накопления данных). Итак, представьте, линия данных делает это, но похоже, что прямая линия тянет ее по графику. Я не знаю, должно ли это произойти, но я хотел, чтобы график (строка, скорее) обновлялся, так что каждый раз, когда линия достигает конца, создается новый. –

+0

Имейте '-numberOfRecordsForPlot:' метод return ' self.plotData.count'. Похоже, вы говорите сюжет, что у него больше доступных очков, чем вы на самом деле. –

+0

В массивах 'plotData' и' voltageData' хранятся одни и те же данные. Есть ли причина, по которой вам нужны две копии всего? –

Смежные вопросы