2015-07-24 2 views
0

Я пытаюсь реализовать пейджер представления с использованием горизонтального UIScrollView. Пейджер представления может содержать много просмотров. Я использую UIScrollview с pagingEnabled к true. Проблема в том, что я не могу иметь все представления в памяти одновременно, так как может быть около 40-50 разных просмотров. Поэтому я решил загрузить текущий вид, и он смежен с 3-х сторон с обеих сторон (справа и слева). Когда я прокручиваю, используя метод scrollViewDidScroll, я удаляю представление слева и вставляю новое представление вправо. Для делать это я следующее:ios: Добавление и удаление просмотров из UIScrollview

  • Сначала проверьте, является ли прокрутки прокрутки вправо или влево, а затем, если полная страница прокручивается или нет
  • Тогда (для прокрутки вправо) я удаляю самый левый вид из SuperView (т. е. scrollView).
  • Переместите координату x оставшихся видов влево.
  • Добавить новое подземелье справа.
  • Соответственно измените размер содержимого прокрутки.

Как-то вышеприведенная реализация не работает должным образом, особенно с изменением координат x. Я думаю, что я что-то упускаю и пытаюсь решить проблему манипулирования представлениями в scrollView неправильно. Это link для демонстрационного проекта, который я реализовал на github. Пожалуйста, любая помощь в отношении проблем в текущей реализации или любая другая идея о том, как реализовать ее по-другому, очень приветствуется.

ПРИМЕЧАНИЕ: У этого кода есть еще одна ошибка, когда прокручивается справа от первого вида до второго вида, которое иногда случается. Я тоже не мог найти решения. Трассировка стека этой проблемы - here.

+0

Зачем вам нужно менять координаты x? Координаты должны оставаться фиксированными. При каждом прокрутке страницы вам нужно только удалить вид с конца и вычислить координаты для противоположного конца и добавить новый вид. – TomSwift

+0

Но это оставило бы пустое место в первой позиции. Таким образом, при перемещении вправо в левом верхнем положении будет пустое пространство цвета прокрутки. – meteors

+0

Не удаляйте его до тех пор, пока прокрутка не остановится. Эта позиция отключена. Кроме того, вы сказали, что у вас есть буфер из трех видов с обеих сторон, которые также находятся вне экрана. – TomSwift

ответ

0

Хорошо, поэтому на самом деле подход сокращения и расширения scrollView. Размер контента - это не правильный подход (по крайней мере, в моем сценарии). Поскольку число просмотров остается неизменным, я устанавливаю значение contentSize на число просмотров * ширину экрана. Теперь каждый раз я просто использую removeFromSuperview(), чтобы удалить их из scrollView и добавить новый для прокруткиView в scrollViewDidScroll() методе.

Полный рабочий проект обновлен here.

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