UIScrollView с нумерацией страниц + показывает часть предыдущих / следующих страниц - PullRequest
32 голосов
/ 11 апреля 2011

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

Cut the Rope menu

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

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

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

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

1 Ответ

44 голосов
/ 11 апреля 2011

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

Для реализации, которую вы хотите, к вашему удивлению, ширина прокрутки на самом деле меньше 320 (или 480). Волшебное свойство для установки:

scrollView.clipsToBounds = NO

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

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

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

Edit:

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

...