Как определить, будет ли scrollToItem прокручиваться - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь прокрутить ячейку в определенном месте (.bottom) и после завершения анимации прокрутки выполнить некоторый код. Проблема в том, что функция scrollToItem не обеспечивает обработчик завершения, поэтому единственным решением является использование делегата (scrollViewDidEndScrollingAnimation). Используя это у меня есть одна проблема, хотя, если ячейка уже находится в этом месте .didEndScrollAnim. никогда не будет звонить.

Есть ли способ узнать, находится ли ячейка уже на UICollectionView.ScrollPosition.bottom?

collectionView.scrollToItem(at: indexPath, at: [.bottom,.centeredHorizontally], animated: true)

Я хочу иметь возможность запускать часть кода, когда ячейка находится в нужном месте [.bottom], а также анимировать прокрутку, если требуется прокрутка.

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

Я могу придумать способ, но он включает в себя повторный вызов scrollViewDidScroll, что снижает производительность экрана.

В функции scrollViewDidScroll:

if (scrollView.contentOffset.y >= (scrollView.contentSize.height - scrollView.frame.size.height)) {
        //reach bottom, here your code
    }
0 голосов
/ 24 мая 2019

Да, вы можете использовать scrollViewDidEndDecelerating функцию, и эта функция будет вызываться, когда представление прокрутки останавливается.

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    let secondItemIndex = IndexPath(item: 1, section: 0)
    categoryCollectionView.selectItem(at: secondItemIndex, animated: true, scrollPosition: .centeredHorizontally)

}

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

    let secondItemIndex = IndexPath(item: 2, section: 0)
    categoryCollectionView.selectItem(at: secondItemIndex, animated: true, scrollPosition: .centeredHorizontally)

}

// Способ прокрутки не влияет на эту функцию, поэтому вы можетеуказать любую позицию, как вы хотите

...