無限ループ
UICollectionViewを継承したクラスをつくり、layoutsubViewsで中心からコンテンツが1/4程度外れていたらContentOffSetを中央へ移動させるようにすれば良い。
let totalContentWidth = CGFloat(cellCount) * cellWidth let centerOffsetX = totalContentWidth / 2 - self.bounds.width / 2 let distFromCentre = centerOffsetX - contentOffset.x if (fabs(distFromCentre) > totalContentWidth / 4) { let moveOffsetX = CGFloat(centerRow()) * cellWidth if contentOffset.x < centerOffsetX { self.contentOffset = CGPoint(x: moveOffsetX , y:contentOffset.y) } else if contentOffset.x > centerOffsetX { self.contentOffset = CGPoint(x: moveOffsetX , y:contentOffset.y) } }
centerRow()は
func centerRow()->Int { guard contentCount > 0 else { return 0 } let row = Int(cellCount/2/contentCount) * contentCount return row }
contentCountはコンテンツの数
cellカウントはセルの数(コンテンツの数の倍数ないし無限)