Действительно, действительно большие UIScrollViews - PullRequest
1 голос
/ 05 марта 2010

Я пытаюсь создать линейную диаграмму уровня детализации, в которой пользователь может увеличивать / уменьшать изображение двумя пальцами по горизонтали и увеличивать атрибут contentSize поля UIScrollView. Они также могут прокручивать по горизонтали, чтобы смещаться влево или вправо и видеть больше графика (проверьте любую акцию на графиках Google Finance, чтобы понять, о чем я говорю). Потенциально представление прокрутки может увеличиться в 100 раз по сравнению с его первоначальным размером при увеличении масштаба.

Мои вопросы: - Кто-нибудь имел опыт работы с UIScrollViews, которые имеют такие большие ограничения на размер контента? Это будет работать? - Представление для представления с прокруткой потенциально может быть очень большим, так как пользователь увеличивает масштаб. Как это обрабатывается в памяти?
- Просто мысль, но возможно ли будет использовать UITableViewCells, ориентированные на горизонтальную прокрутку, для постраничного ввода / вывода данных?

Это прямо сейчас открытый вопрос - я все еще в мозгах. Если у кого-то есть какие-либо идеи или кто-то реализовал это раньше, ответьте, пожалуйста, своим опытом. Спасибо!

Ответы [ 3 ]

1 голос
/ 31 августа 2012

Это довольно старая тема, но все же я хочу поделиться своим опытом.Использование такого большого UIView (в 100 раз больше его исходного размера) в UIScrollView может вызвать предупреждение памяти.Вы должны избегать рендеринга всего UIView сразу.Лучший способ реализовать это - визуализировать единственную видимую область и область вокруг нее.Таким образом, UIViewScroll может плавно перемещаться по этой области.Но что, если пользователь прокрутил область, которая была обработана?Используйте делегат, чтобы получать уведомления, когда пользователь прокручивает предварительно обработанную область и пытается отобразить новую область, которая будет показана.Основная идея этой реализации состоит в том, чтобы использовать 9 UIViews (или более) для разбиения большей области, когда пользователь прокручивает (или перемещает) из старой позиции в новую.Просто переместите несколько UIViews на новое место, чтобы убедиться, что один из UIView является основным видом, который вы можете видеть в основном, а остальные 8 UIViews находятся вокруг него.Надеюсь, что это полезно.

0 голосов
/ 03 сентября 2012

Но, тем не менее, этот подход (в приведенном выше примере) недостаточно хорош в некоторых случаях. Потому что мы только визуализировали ограниченную область в UIScrollView.

Пользователь может использовать различные жесты в UIScrollView: перетаскивание или переключение. С помощью перетаскивания предварительно визуализированных 8 маленьких UIViews достаточно для покрытия области прокрутки в большинстве случаев. Но при переключении UIScrollView может прокручивать очень большую область, когда пользователь делает быстрое движение, и эта область абсолютно пуста (потому что мы не отображали ее) во время прокрутки. Даже если мы можем отобразить нужный контент после того, как UIScrollView прекратит прокрутку, пробел во время прокрутки не очень удобен для пользователя.

Для некоторых приложений это нормально, например, карта Google. Поскольку данные не могут быть загружены сразу. Ожидание перед загрузкой является разумным.

Но если данные локальные, мы должны по возможности устранить эту пустую область. Таким образом, предварительный рендеринг области, которая будет прокручиваться, имеет решающее значение. В отличие от UITableView, UIScrollView не имеет возможности сообщить нам, какая ячейка будет отображаться и какая ячейка будет переработана. Итак, мы должны сделать это сами. Метод [UIScrollViewDelegate scrollViewWillEndDragging: withVelocity: targetContentOffset:] будет вызываться, когда UIScrollView начинает замедляться (на самом деле scrollViewWillBeginDecelerating - это метод, который вызывался до замедления, но в этом методе мы не знаем, какая информация будет отображаться или прокручиваться) , Поэтому, основываясь на UIScrollView.contentOffset.x и параметре targetContentOffset, мы можем точно знать, где начинается UIScrollView и где остановится UIScrollView, а затем предварительно визуализировать эту область, чтобы сделать прокрутку более плавной.

0 голосов
/ 05 марта 2010

У меня есть что-то похожее, хотя, вероятно, не того размера, о котором вы говорите. UIScrollView не проблема. Проблема в том, что если вы рисуете на нем UIViews (а не рисуете сами) UIViews, которые хорошо, далеко от экрана, продолжают существовать в памяти. Если вы на самом деле рисуете линии, создавая свой собственный UIView и отвечая на drawRect, это нормально.

Предполагая, что вы достаточно опытный программист, работа с большим представлением прокрутки, которое рисует части диаграммы, занимает всего несколько дней, поэтому я рекомендую создать для него прототип и запустить его под объектом инструмент выделения и посмотреть, если это указывает на какие-либо проблемы.

Извините за неопределенность моего ответа; это вопрос мозгового штурма

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