Для создания этой функциональности я добавил некоторый код в мою реализацию numberForPlot:field:recordIndex:
, чтобы проверить, равен ли индекс записей «числу записей в моих исходных данных минус один» (поскольку источник данных графика использует нольна основе нумерации).
Поскольку CorePlot отображает столбцы на моей гистограмме последовательно, поэтому я могу быть уверен, что при достижении номера столбца, равного числу записей в моем источнике данных минус один,последняя запись (это может быть более нюансированная ситуация, если вы рисуете более одного графика на графике).
На этом этапе я просто создаю уведомление iOS под названием finishedDrawingGraph
в numberForPlot:field:recordIndex:
Метод:
// If this is the last bar in the chart for this layer, send notification to
// say that the graph has finished drawing
if (index == [self.dataController.builds count]-1
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"finishedDrawingGraph" object:nil];
}
У меня в контроллере просмотра есть прослушиватель для прослушивания событий finishedDrawingGraph
.Поскольку система уведомлений относительно медленная (по сравнению с непосредственным вызовом метода), к моменту получения этого уведомления график почти наверняка закончил рисование.Чтобы добавить больше уверенности, я мог бы подождать некоторое время после получения уведомления.
- (void)eventHandler: (NSNotification *) notification
{
if ([notification.name isEqualToString:@"finishedDrawingGraph"])
{
NSLog2 (@"Graph drawn.");
// Do something with your graph.
// For example, create an image of the graph
UIImage *graphImage = [graph imageOfLayer];
}
}
Это не особенно элегантное решение, и оно может сломаться при некоторых обстоятельствах (система при очень большой нагрузкеобновите до CorePlot), но этого более чем достаточно для моих текущих потребностей.