Нарисуйте линейный график в Objective C с большим количеством данных и покажите их в виде коллекции
У меня есть большие объемы данных (элементы / строки), хранящиеся в файле с расширением.rec (так же, как.text). Мне нужно показать вершины в линейном графике, поддерживающем масштабирование и перетаскивание. Я могу нарисовать линейный график с CoreGraphics
, Но это не работает с большими объемами вершин. Для данных большого объема рисование графика занимает более 3 минут. Мне нужно быстро нарисовать как минимум 80000 элементов (вершин). Мое текущее решение может плавно обрабатывать 500 элементов. Я понятия не имею, как мне справиться с большим объемом предметов.
Я также показываю элементы (только данные, такие как строка против столбца, а не график) в UICollectionView
, Время загрузки UICollectionView
блокирует основной поток и приложение становится холодильником. Не могли бы вы дать мне несколько советов, как я могу поддерживать загрузку больших объемов данных.
Вы можете найти полный код и файл данных на Github, мне нужна помощь как для рисования линейного графика, так и для UICollectionView
,
2 ответа
Не надо, разрешение экрана недостаточно высокое, чтобы сделать этот объем точек полезным. Нормализуйте свои данные так, чтобы у вас было несколько разных уровней масштабирования, как если бы вы использовали мозаику карты. Таким образом, при уменьшении вы видите общий поток, но не конкретные детали. При увеличении масштаба вы используете "больше" точек данных, но в ограниченном диапазоне, поэтому сложность графика остается одинаковой на всех уровнях.
Представление коллекции - совершенно другая вещь. Повторная визуализация каждого графика каждый раз, когда свитки коллекции не будут работать хорошо. Вам нужно будет выполнить кеширование графиков или снимков графиков. Вы должны быть осторожны с использованием памяти, и будет очень трудно не допустить некоторой задержки, когда вы переходите к новым графикам, которые вы не готовите (или снимки) заранее. Вы также должны включить подкачку, чтобы на экране не было нескольких графиков одновременно.
Я предлагаю вам посмотреть сессию 211 WWDC 2012, Построение параллельных пользовательских интерфейсов и применить там концепции. Это особенности ячеек, содержимое которых независимо запрашивается и отображается. Он включает в себя табличное представление, но та же концепция может применяться к коллекционным представлениям.
Основная концепция заключается в следующем:
1. В tableView:cellForRowAtIndexPath создается экземпляр ячейки.
2. В том же методе операция извлечения данных для заполнения ячейки создается и сохраняется в словаре. Ссылка на ячейку передается в операцию. У операции есть обработчик завершения, который заполняет ячейку и удаляет операцию из словаря.
3. Перед возвращением ячейки из метода операция добавляется в очередь операций.
4. В tableView:didEndDisplayingCell:forRowAtIndexPath операции для ячеек, которые переместились за пределы экрана, отменяются и удаляются из словаря.