Основной сюжет показывает счетчик «Загрузка»

Я использую основной график (0.4) для отображения графика, и он работает нормально. Однако (особенно на iPad) рендеринг графика может занять некоторое время. Я добавил UIActivityIndicatorView к графику, который появляется, когда графики начинают рисоваться, но я не могу найти какое-либо событие для перехвата, которое я мог бы использовать для остановки счетчика.

Я попытался использовать метод numberForPlot и определить, когда была запрошена последняя точка данных, но он вызывается несколько раз для каждой строки в scatterGraph, поэтому я не могу легко его использовать. Есть ли какое-либо графическое событие, которое я могу зацепить для этого?


person Ian Firth    schedule 27.09.2011    source источник


Ответы (2)


Если вы делаете [graph reloadData] для обновления графика, можете ли вы просто заключить этот вызов с вызовами запуска/остановки индикатора? Я думаю, что основной сюжет делает все в основном потоке.

person Flyingdiver    schedule 27.09.2011
comment
к этому относится тот же комментарий, что и выше. Я думаю, что поток пользовательского интерфейса не успевает нарисовать счетчик. - person Ian Firth; 28.09.2011
comment
Просто для справки, я разобрался с этим. Я не использовал метод делегата в alertView, чтобы указать, что он был показан, как только я использовал это, alertView полностью появляется перед графиком. Спасибо за вашу помощь. - person Ian Firth; 10.10.2011

Core Plot использует Core Animation для всего рендеринга. Один график содержит множество слоев условного доступа, которые визуализируются независимо. -reloadData просто говорит графику обновить кэш данных при следующем отрисовке и сообщает Core Animation, что его нужно перерисовать. Точно так же простое заключение в скобки вызовов источника данных фиксирует только кэширование данных, которое происходит до рендеринга. Вы пропустите фактическое время отрисовки и никогда не узнаете, повторно ли Core Animation повторно визуализирует график в другое время, например, после изменения размера.

Если вас интересует только время рендеринга графика, а не другие части графика, один из способов сделать это — создать подкласс CPTScatterPlot и переопределить метод -renderAsVectorInContext:. Соедините вызовы super с кодом вашего индикатора активности.

person Eric Skroch    schedule 27.09.2011
comment
Я все еще борюсь с этим. Я думаю, потому что все операции с основным сюжетом выполняются в потоке графического интерфейса. Даже если я покажу «спиннер», затем вызову reloadData, а затем остановлю счетчик, счетчик не появится до тех пор, пока операция графа не будет завершена. Я просто глуп, есть ли способ убедиться, что счетчик нарисован до того, как я начну перезагрузку графика? - person Ian Firth; 28.09.2011