Swift学习笔记(十三):无限轮播

102 阅读1分钟

无限轮播

func setDataList(data: Array<Any>) {

        dataList = data

        if loop && dataList.count > 1{

            resetDataSource()

        }
        else {

            myCollectionView?.reloadData()

        }

}
    
    
func resetDataSource() {

        //   0 1 2 3 4
        //   0 1 2 3 4 0
        // 4 0 1 2 3 4 0
        dataList.append(dataList.first!)
        dataList.insert(dataList[dataList.count - 2], at: 0)

        myCollectionView?.reloadData()

        //从第二张开始
        myCollectionView?.scrollToItem(at: IndexPath.init(item: 1, section: 0), at: .left, animated: false)

}


// 用户手指触摸产生的滚动才会调用该方法
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

    redirectPosition()

}
 

func redirectPosition() {

    let currentIndex = Int((myCollectionView?.contentOffset.x)! / (myCollectionView?.frame.size.width)!)

    print("当前index:\(currentIndex)")


    //滚动到第一张时,无感切换到倒数第二张
    if currentIndex == 0 {

        myCollectionView?.scrollToItem(at: IndexPath.init(item: dataList.count - 2, section: 0), at: .left, animated: false)

    }


    //滚动到最后一张时,无感切换到正数第二张
    if currentIndex == dataList.count - 1 {

        myCollectionView?.scrollToItem(at: IndexPath.init(item: 1, section: 0), at: .left, animated: false)

    }

}