自定義ScrollView滾動整數(shù)單元格距離/居中顯示

方法一:


方法一效果
//滾動自然
//注意:isPagingEnabled = fasle
    func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
        let targetOffset: CGPoint = getNearestContentOffset(targetContentOffset.pointee)
        print(self.bannerCollectView.contentOffset.x)
        targetContentOffset.pointee = targetOffset
    }
    func getNearestContentOffset(_ offset: CGPoint) -> CGPoint {
        let pageSize = itemWidth + miniSpace
        let newPage: Int = Int(roundf(Float(offset.x/pageSize)))
        return CGPoint(x: CGFloat(newPage) * pageSize, y: offset.y)
    }

方法二:


方法二效果
//注意:isPagingEnabled = true
//每次只滾動一個單元格距離 
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        stopOffsetX = scrollView.contentOffset.x
    }
    func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
        //如果是向右滑或者滑動距離大于item的一半,則像右移動一個item+space的距離,反之向左
        let currentPointX = scrollView.contentOffset.x
        let moveLen: CGFloat = currentPointX - stopOffsetX
        let shouldPage: Int = Int(moveLen/(itemWidth/2 + miniSpace/2)) //一次只能滾動一格
        if velocity.x > 0 || shouldPage > 0 {
            dragLen = 1
        } else if velocity.x < 0 || shouldPage < 0 {
            dragLen = -1
        } else {
            dragLen = 0
        }
    }
    func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
        let currentndIndex: UInt = UInt(stopOffsetX + CGFloat(itemWidth + miniSpace)*0.5) / UInt(itemWidth + miniSpace)
        bannerCollectView.scrollToItem(at: NSIndexPath.init(row: Int(currentndIndex) + dragLen, section: 0) as IndexPath, at: UICollectionView.ScrollPosition.centeredHorizontally, animated: true)
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容