Подтвердить что ты не робот

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

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

Cut the Rope menu

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

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

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

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

4b9b3361

Ответ 1

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

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

scrollView.clipsToBounds = NO

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

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

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

Edit:

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