UIScrollView с разбивкой на страницы + отображение части предыдущих / следующих страниц

Я пытаюсь создать своего рода меню «игрового режима», подобное тому, которое используется в игре «Cut the Rope» для выбора пакета уровней:

Меню Cut the Rope

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

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

Итак: если разбиение на страницы происходит на нескольких границах представления, есть ли способ добиться этого эффекта с помощью UIScrollView?

Тот факт, что мы видим всю ширину экрана, предполагает, что ширина фрейма UIScrollView в этом случае будет 320 пикселей, но каждый отдельный элемент должен быть меньше этого, чтобы показать эту небольшую часть предыдущего и следующего элементов, таким образом испортила пагинацию ...


person André Morujão    schedule 11.04.2011    source источник


Ответы (1)


Для справки вы можете увидеть здесь образец реализации элемента управления страницей. https://developer.apple.com/library/content/samplecode/PageControl/Introduction/Intro.html

Для желаемой реализации, к вашему удивлению, ширина scrollview на самом деле меньше 320 (или 480). Настраиваемое магическое свойство:

scrollView.clipsToBounds = NO

Единственная проблема с этой реализацией заключается в том, что scrollview не получает событий касания, если касание находится за пределами scrollView. Это можно исправить, передав его родительское событие hitTest в scrollView.

Просто для ссылки на лучшее объяснение: горизонтальное перелистывание UIScrollView, например вкладки Mobile Safari

Немного отличается от того, что я рекомендую, но делает то же самое.

Изменить:

У меня есть небольшой проект под названием LXPagingViews, который выполняет вышеуказанное, надеюсь, нестандартным способом (отправьте мне запрос на вытягивание или отзыв): https://github.com/lxcid/LXPagingViews

person lxcid    schedule 11.04.2011
comment
Как бы мы поддержали масштабирование при таком просмотре страницы? - person Usman Ismail; 14.02.2013
comment
@lxcid ты мой ГЕРОЙ :) - person abbood; 19.11.2013
comment
@lxcid, просто из любопытства, но что бы вы сделали, если бы просмотры имели разную ширину? - person dOM; 11.03.2015
comment
Я тестировал это, и когда предыдущие / следующие ячейки выходят за границы, одна из них скрывается в представлении коллекции. Видимо, есть подход получше, я еще не пробовал, но он имеет смысл: khanlou.com/2013/04/paging-a-overflowing-collection-view - person Gian Franco Zabarino; 26.06.2019