UIScrollView с разбивкой по страницам + отображение части предыдущей/следующих страниц
Я пытаюсь создать своеобразное меню "игрового режима", аналогичное тому, которое используется в игре "Cut the Rope", чтобы выбрать пакет уровня:
![Cut the Rope menu]()
В частности, я хочу добиться того же эффекта, что и "текущий элемент" (в данном случае, элемент "2. Fabric Box" ) плюс бит предыдущего и следующих элементов (чтобы убедиться, что пользователь знает, что с помощью прокрутки доступно больше режимов), с включенной разбивкой на страницы (чтобы сделать прокрутку автоматически "центрированной" по этим элементам).
Это похоже на естественное задание для UIScrollView с включенной разбивкой по страницам, однако из документации кажется, что разбиение на страницы происходит по кратным границам представления.
Итак: если разбиение на страницы происходит по кратным границам представления, есть ли способ достичь этого эффекта с помощью UIScrollView?
Тот факт, что мы видим полную ширину экрана, предполагает, что ширина кадра UIScrollView в этом случае будет 320 пикселей, но каждый отдельный элемент должен быть меньше, чем для того, чтобы показать это немного предыдущего и следующие пункты, таким образом испортив разбивку на страницы...
Ответы
Ответ 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