2016-07-13 18 views
3

У меня большие объемы данных (элементов/строк), хранящихся в файле с расширением .rec (как и .text) Мне нужно показать вершины в линейном графике, поддерживающие масштабирование и перетаскивание. Я могу нарисовать линейный график с CoreGraphics. Но это не работает с большими объемами вершин. Для получения больших объемов данных граф занимает более 3 минут. Мне нужно собрать не менее 80 000 предметов (вершин). Мое текущее решение может обрабатывать 500 элементов плавно. Я понятия не имею, как я могу обрабатывать большой объем предметов.Рисовать график линии в Objective C с большим количеством данных и показать их в виде коллекции

Я также показываю элементы (только данные, такие как строка против столбца, а не график) в UICollectionView. Время загрузки UICollectionView блокирует основную нить и приложение становится холодильником. Не могли бы вы дать мне несколько советов, как я могу поддерживать загрузку больших объемов данных.

Вы можете найти полный код и файл данных на Github, мне нужна помощь как для рисования линейного графика, так и для UICollectionView.

8000 Data plotted, took 1.5 mins Data on tabular form with collection view

+0

Этот вопрос слишком широк и отсутствует [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). Единственная причина, почему этот вопрос не закрывается, - это то, что приложили щедрость. – JAL

+0

Вы видели мои коды на Github? https://github.com/kallolfrisky/LineGraph Итак, как я могу улучшить свой вопрос, чтобы получить решение ... – kallol

ответ

1

Я предлагаю вам посмотреть сессию 211 WWDC 2012, Построение Одновременные пользовательских интерфейсов и применять концепции там. В нем представлены ячейки, содержимое которых независимо запрашивается и визуализируется. Он включает представление таблицы, но та же концепция может применяться к представлениям коллекции.

Основная концепция заключается в следующем:
1. В tableView: cellForRowAtIndexPath создается экземпляр ячейки.
2. В этом же способе создается и хранится операция для извлечения данных для заполнения ячейки. Ссылка на ячейку передается операции. Операция имеет обработчик завершения, который заполняет ячейку и удаляет операцию из словаря.
3. Прежде чем ячейка будет возвращена из метода, операция будет добавлена ​​в очередь операций.
4. В tableView: didEndDisplayingCell: forRowAtIndexPath операции для ячеек, которые переместились за пределы экрана, отменены и удалены из словаря.

+0

Спасибо, приятель, эта параллельная обработка задач с помощью NSOperationQueue помогает мне анализировать данные в отдельном потоке и поддерживать основную часть гонорара, но рисунок графика все еще без решения и занимает слишком много времени. – kallol

2

Не так, разрешение экрана недостаточно велико, чтобы в любом случае этот объем точек был полезен. Нормализуйте свои данные таким образом, чтобы у вас было несколько разных уровней масштабирования, например, при разбиении карты. Поэтому, когда вы уменьшаете масштаб, вы видите общий поток, но не конкретные детали. По мере увеличения масштаба вы используете «больше» точек данных, но в уменьшенном диапазоне, поэтому общая сложность графика остается неизменной на всех уровнях.

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

+0

Большое вам спасибо. Мой контекст прокручивается, вы можете видеть, запустив коды. Ваша идея хорошая, но я не смог реализовать ее на уровне кода.Я показываю только данные в представлении коллекции, а не в графике ... – kallol

+0

Я только что отредактировал свой пост и загруженные изображения, так что вы получите лучшую сцену о проблеме ... – kallol

+0

для графика вам нужно сделать что-то вроде группы X точек и усреднить значения, затем нарисуйте этот новый меньший набор значений в виде графика. измените X по мере изменения масштаба масштабирования. для просмотра коллекции вам необходимо загрузить пакет/страницу и/или загрузить данные в фоновом режиме – Wain

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

  • Нет связанных вопросов^_^