1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Foldcc-FScrollPage

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

FScrollPage

Описание проекта

Контроллер для горизонтальной прокрутки в Unity 5.x и выше.

Введение

Из-за того что встроенный контроллер Scroll View в Unity не позволяет гибко удовлетворять потребностям приложения, было решено создать свой контроллер для горизонтальной прокрутки. Этот компонент не зависит от других UI компонентов Unity, но имеет свои ограничения и предназначен для использования как пример.

Пример работы: ![Горизонтальная прокрутка][2]

![Вертикальная прокрутка][3]

Архитектурное проектирование

Этот компонент состоит из трёх частей:

  • 1 Прокрутка: перемещение вместе с точкой касания (или мыши)
  • 2 Закончилась прокрутка: затухание движения
  • 3 Конец прокрутки: коррекция положения

Контроллер FScrollPage управляет позицией и размерами объектов, реагирует на взаимодействие пользователя, слушает события прокрутки, выполняет эффекты прокрутки и передает событие выбора выбранным объектам FScrollItem. Для удобства инициализация FScrollPage разделена на два типа: первый автоматически проверяет и маркирует все подобъекты в указанной ноде, а второй требует передачи карты <itemID, item> и ID выбранного элемента.

FScrollItem

Объект FScrollItem предоставляет обратные вызовы для событий "нажатия" и "выбора". При нажатии объект автоматически перемещается в центр и уведомляет FScrollPage о своём выборе.## Управление позиционированием

  • Общее расположение с использованием anchor points.
  • Настройка положения, размера и расстояния между элементами.

Полученные подобъекты map<itemID, item> перебираются, создаются соответствующие объекты FScroillObject и устанавливаются общие параметры расположения (центрирование). Инициализируются lastPosition и Position (FScrollObject имеет свойство RectTransform, а также свойства Position и lastPosition, которые используются для записи текущего (или направляемого) положения и информации о последнем положении). Это используется для дальнейшей прокрутки и коррекции положения.

Принцип слайдового прослушивания

Принцип слайдового прослушивания заключается в том, чтобы активировать слайдовое обнаружение при наличии событий нажатия или перемещения пальца на ползунке. Когда скорость движения превышает пороговое значение, считается, что происходит скольжение. Слайдовое прослушивание прекращается, когда обнаруживается отпускание пальца или указателя с ползунка.Важно отметить, что если прикоснуться к ползунку таким образом, чтобы он перехватил событие клика по элементу, то событие OnPointerDown ползунка не будет вызвано. Вначале я обратился к статье о проникновении в UI события клика: [проникновение в UI события клика][6], но после использования заметил, что при множественном наложении UI возникают проблемы со стеком памяти, что может привести к зависанию редактора. Впоследствии я нашёл более простое решение — реализовал интерфейс события клика в FScrollItem, передавая события нажатия и отпускания напрямую соответствующим событиям контроллера.

public void OnPointerDown(PointerEventData eventData)
{
    // Передаем событие
    scrollPage.OnPointerDown(eventData);
    // Дальнейшая логика
    lastPointer = eventData.position;
}
```## Эффект прокрутки и корректировка положения
Прокручивая элементы, контролируем их перемещение в зависимости от скорости прокрутки. После окончания прокрутки скорость плавно уменьшается до нуля. Когда скорость становится меньше определённого порогового значения, выполняется корректировка положения. При этом эффект тряски реализуется с использованием функции замедления `BackEaseOut`.

```csharp
static float BackEaseOut(float t, float b = 0, float c = 1, float d = 1)
{
    return c * ((t = t / d - 1) * t * ((1.70158f + 1) * t + 1.70158f) + 1) + b;
}

При корректировке положения сначала определяется ближайший к центру элемент, его ID записывается и передаётся методу прокрутки, затем элемент перемещается в правильное положение при помощи этого метода.

Ошибки в исходном коде

Если вы планируете использовать этот исходный код, вам следует знать следующие недостатки:

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Скользящий элемент управления для отображения информации в Unity 5.x и выше. Развернуть Свернуть
GPL-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/Foldcc-FScrollPage.git
git@api.gitlife.ru:oschina-mirror/Foldcc-FScrollPage.git
oschina-mirror
Foldcc-FScrollPage
Foldcc-FScrollPage
master