Реализация карусели на CollectionView (коллекция с пагинацией)

swift

#1

Всем привет!
Есть UICollectionView с PageControll’ом. На экране виден один элемент, при скролле к следующему переходим на “другую страницу” и меняется пагинатор (выделяется точка на PageControl). Но когда мы дойдем до конца, свайпая вправо, мы в конце концов упремся. Но как добавить возможность бесконечного скролла, чтобы при скролле вправо на последнем элементе я вернулся к самому первому. А при скролле влево на самом первом, попал на самый последний? Соответсвенно, чтобы изменялось выделенная точечка на PageControll’е.
Вот что есть сейчас -

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offSet = scrollView.contentOffset.x
    let width = scrollView.frame.width
    let horizontalCenter = width / 2

    pageControlDelegate.setPage(number: Int(offSet + horizontalCenter) / Int(width))
}

    protocol PageControlDelegate {

   func setPage(number: Int)
    }

extension MainNewController: PageControlDelegate {
    func setPage(number: Int) {
        pageControl.currentPage = number
    }

#2

для этого делается хитрость, нужно создать на 2 ячейки больше и ваш первый элемент будет стартовать не с 0 позиции, а с 1, но и так же будет находиться в последней. Аналогично для последнего элемента, который будет находиться в 0 и предпоследней позициях соответственно.
Вся магия заключается в переходе на нужную позицию без анимации, когда вы находитесь на 0 или последней позиции скрола. Делать это нужно после завершения анимации скрола.
Ну а ваши индикаторы уже подправляются в зависимости от текущего индекса скрола.
Статей на эту тему много, можно легко нагуглить готовые варианты.


#3

Гуглил что-то на подобие “collectionview with pagination infinite”
Ничего не нашел, поэтому сюда обратился)


#4

#5

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