Rodhos Soft

備忘録を兼ねた技術的なメモです。Rofhos SoftではiOSアプリ開発を中心としてAndroid, Webサービス等の開発を承っております。まずはご相談下さい。

無限ループ

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カウントはセルの数(コンテンツの数の倍数ないし無限)