UIPageViewController: как иметь отрицательное расстояние между контроллерами представления (со стилем прокрутки)

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

Я уже использовал для аналогичных целей UIPageViewControllers, чтобы воспользоваться преимуществами протоколов источника данных и делегата, которые очень полезны для управления памятью и другими вещами (сохранение только 3 контроллеров представления в памяти, предоставление делегатам для обработки действий точно после выполнения перехода и так далее). on): так что я думаю, что и в этом случае этот компонент является лучшим выбором.

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

ссылка на изображение (извините, я пока не могу включать изображения в свои сообщения)

До сих пор я не мог понять, как это реализовать. В параметрах во время инициализации можно указать UIPageViewControllerOptionSpineLocationKey для установки (из документации) «Пробел между страницами в точках»: но это, похоже, работает только с положительным значением, так что пространство увеличивается, а отрицательные значения игнорируются, что может уменьшить пространство.

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

Если нужно, могу приложить немного кода и скриншот прототипа


person Shalafi    schedule 06.02.2014    source источник


Ответы (1)


Хорошо, я понимаю, что это невозможно и почему это возможно. Методы источника данных загружают, когда это необходимо, контроллеры представления, которые находятся до и после текущего. Чтобы представления этих контроллеров представления всегда были видимыми, как я и хотел, потребуется, чтобы источник данных загружал более одного контроллера представления после (или до, в зависимости от направления прокрутки) текущего, чтобы быть готовым к действиям панорамирования (потенциально, до того, как анимация закончится, когда пользователь поднимет палец, два контроллера просмотра «после» или «до» могут стать видимыми в моей желаемой конфигурации), и это не предназначено для UIPageViewController на iPhone, особенно в портретном режиме.

Таким образом, единственный способ добиться того, чтобы в компоненте с горизонтальной прокруткой было видно более одного представления в любое время, — это реализовать UIScrollview с горизонтальным пейджингом и соответственно вычислить contentSize и другие размеры.

person Shalafi    schedule 10.02.2014
comment
В iOS 7 для достижения этого можно было бы использовать UICollectionViewController с включенным paging для привязки. - person Jesse; 25.04.2014