обнаружение отмененной прокрутки в scrollView с включенной подкачкой - PullRequest
0 голосов
/ 08 апреля 2020

Я хочу определить, когда пользователь переходит на следующую страницу (в collectionView с включенной подкачкой страниц). Как только пользователь начинает переходить к следующей ячейке, я подготавливаю ее, используя функцию collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath). Здесь я устанавливаю переменную, указывающую, какой будет следующая видимая ячейка.

Затем, когда пользователь прекращает перетаскивание, я запускаю визуальные обновления, используя функцию scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool). На данный момент я знаю, какая ячейка видна, потому что я сохранил ее в переменной ранее.

Однако, когда пользователь начинает перетаскивать collectionView и затем прокручивает обратно в начальный вид, collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) уже сохранил следующую вещь. Это приводит к тому, что следующая функция (scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool)) запускает неправильный код (визуальные обновления).

Есть ли способ узнать, когда пользователь отменил или фактически выполнил прокрутку на следующую страницу, чтобы я мог остановить scrollViewDidEndDragging от обновления, если прокрутка не была "успешной"?

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

В решении использовалась функция scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) и смотрел параметр targetContentOffset. если она превышает половину ширины страницы в любом направлении, прокрутка прошла успешно.

0 голосов
/ 14 апреля 2020

Вы можете сравнить .contentOffset просмотра прокрутки из didStartDragging и didEndDragging. Анимация подкачки успешна, если и только если изменилось contentOffset

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...