CorePlot: как мне узнать, что графическое изображение закончено?что-нибудь вроде метода ViewDidLoad? - PullRequest
4 голосов
/ 17 февраля 2012

CorePlot: как узнать, что графическое изображение закончено? что-нибудь вроде метода ViewDidLoad?

Потому что у меня есть вид загрузки спереди, когда он загружает контент.

Я использую AAPLOT из кода примера CorePlot.

Я думал, что следующая функция - сказать мне, что она заканчивает графику, но это не так.

-(void)dataPullerDidFinishFetch:(APYahooDataPuller *)dp;

есть ли такая функция, как ViewDidLoad, которая может сообщить мне, когда она успешно закончит рисование ??

спасибо

Ответы [ 2 ]

3 голосов
/ 18 февраля 2012

Core Animation отвечает за все рисование в Core Plot.Полный график основного графика имеет много слоев;каждый нарисован независимо.Не определен порядок рисования, и Core Animation не обеспечивает никаких обратных вызовов после завершения рисования.

Вы можете поднять представление загрузки, пока ваш источник данных не будет запрошен для всех данных.Если загрузка данных занимает много времени, вам не следует блокировать основной график, ожидая его поступления. Кэшируйте данные внутри и вызывайте -reloadData на графике (или одном графике), когда он будет готов.Просто покажите свое представление загрузки, ожидая поступления данных. Как только вы скажете Core Plot загрузить его, удалите представление загрузки.

2 голосов
/ 22 марта 2012

Для создания этой функциональности я добавил некоторый код в мою реализацию 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), но этого более чем достаточно для моих текущих потребностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...