Таким образом, QML StackView предоставляет способ вернуться назад с помощью функции pop()
. Я ищу способ перейти на предыдущую страницу, просто проведя пальцем вправо с элементами пользовательского интерфейса, следуя пальцам пользователя (вроде SwipeView
). Как я могу этого добиться? Я осмотрелся, и все, что я нашел, это https://github.com/alejoasotelo/SwipePageStackWindow, который — это старый проект, который делает то же самое со старым PageStack
.
Жесты смахивания с помощью QML Stackview
Ответы (1)
Один из возможных способов сделать это — создать настраиваемый элемент с именем swiper, у которого есть swipeview с 3 страницами. 1 и 3 пусты, но 2 имеет содержимое. Когда страница 1 активна, она позволяет проходить всем событиям, если не обнаружено смахивание влево. Страница 2 имеет загрузчик, поэтому вы можете изменить содержимое.
Если вы создадите два из них друг над другом, вы можете переместить один перед другим, когда вам нужно переключить представления. Два загрузчика означают, что содержимое никогда не будет потреблять слишком много памяти.
Итак, у вас будет переменная isBottomActive
И одна функция метода pushNewView(view) ‹- это переместит любой неактивный swiper на передний план, поместит представление в его загрузчик и изменит currentIndex на 2.
Теперь, если вам нужно вернуться назад, просто проведите пальцем вправо. Индекс представления swiper изменяется (здесь вы можете связать метод, чтобы старый swipeview перемещался обратно вниз с другим представлением)
SwipeView
. Добавьте пустую страницу в качестве второй страницы, а когда индекс изменится, вставьте ее. В противном случае сделайте страницу перетаскиваемой (сMouseArea
) и реализуйте пролистывание и определение точки невозврата, скорость и анимацию самостоятельно. - person derM   schedule 28.05.2018SwipeView
на самом деле не альтернатива, поскольку мои приложения будут содержать не менее 20 слоев страниц, поэтому я буду вручную создавать и уничтожать элементы, чтобы избежать проблем с производительностью. Я думал об использованииMouseArea
и реализовать этот жест самостоятельно, но я хочу, чтобы предыдущая страница скользила слева, когда пользователь проводит пальцем по текущему элементу вправо. Я не понимаю, как можно заставить предыдущую страницу сделать это. Предоставляет лиStackView
способ сделать это? - person reckless   schedule 28.05.2018SwipeView
вместоStackView
связана с производительностью/памятью, есть пример того, как загружать только три элемента одновременно. Вы также можете попробовать создать индивидуальную версиюSwipeView
, которая автоматически заключает добавленныеItem
в соответствующиеLoader
. - person derM   schedule 28.05.2018StackView
у вас уже есть ручное управление временем жизни ваших элементов — они живут от push до pop - person derM   schedule 28.05.2018StackView
в пользовательскомSwipeView
, а также потерять возможность настраивать переходы при переключении между страницами (полагаю, я мог бы попытаться как-то воссоздать и это тоже) . Это потребует довольно много усилий, и я бы предпочел оставить этот вариант в крайнем случае. Я считаю, чтоStackView
действительно идеален, но единственное, чего мне не хватает, — это возможности использовать жесты смахивания так, как я описал выше. - person reckless   schedule 28.05.2018SwipeView
с двумя элементами наStackView
. Первый Item — это реальный контент, второй — пустой Item. Затем соединитеindexChanged
SwipeView
сpop()
. Это позволит вам получить красивый и плавный эффект смахивания, который мне было трудно создать другим способом. С другой стороны, оф. это взлом. - person derM   schedule 28.05.2018SwipeView
внутриStackView
? Вот так:StackView{ id: stack SwipeView{ ..... } }
- person reckless   schedule 28.05.2018