美文网首页
swift | 控制UIScrollView实现滑动分页效果

swift | 控制UIScrollView实现滑动分页效果

作者: SFHinc | 来源:发表于2021-12-28 10:42 被阅读0次

    这里以横向滑动为例,竖向同理,过程可以参考注释。

    var dataList:[Any] = [] //数据源
    var lastContentOffset: CGFloat = 0 //上次滑动的偏移量
    var isDrag:Bool = false//是否处于滑动状态
    
    //MARK: - UIScrollViewDelegate
    extension ZJJTBaseVC: UIScrollViewDelegate {
        
        //开始拖拽
        func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
            //记录偏移量
            lastContentOffset = scrollView.contentOffset.x
            //业务逻辑
            if dataList.count > 0 {
                isDrag = true
            }
        }
        
        //结束拖拽
        func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
            if decelerate == false {//没有减速
                scrollViewHandleScrollWithScrollView(scrollView)
                //业务逻辑
                if dataList.count > 0 {
                    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
                        self.isDrag = false
                    }
                }
            }
        }
        
        //开始减速
        func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
            //开始减速(即手指离开屏幕)立即停止滚动
            scrollView.setContentOffset(scrollView.contentOffset, animated: false)
            scrollViewHandleScrollWithScrollView(scrollView)
            //业务逻辑
            if dataList.count > 0 {
                DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
                    self.isDrag = false
                }
            }
        }
        
        //处理滑动到哪一个cell
        func scrollViewHandleScrollWithScrollView(_ sender: UIScrollView) {
            let offset = sender.contentOffset.x
            if offset > lastContentOffset && offset - lastContentOffset > 30 {//右滑
                if scrollIndex != dataList.count - 1 {
                    scrollIndex += 1
                }
            } else if offset < lastContentOffset && lastContentOffset - offset > 30 {//左滑
                if scrollIndex != 0 {
                    scrollIndex -= 1
                }
            }
    
            //业务逻辑
            if collectionView != nil {
                collectionView.scrollToItem(at: IndexPath.init(item: scrollIndex, section: 0), at: .centeredHorizontally, animated: true)
                if scrollIndex == currentIndex {
                    let cell = self.collectionView.cellForItem(at: IndexPath.init(item: self.currentIndex, section: 0)) as? ZJJTBaseCollectionCell
                    if cell != nil {
                        cell!.isPlay = isPlay
                    }
                }
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:swift | 控制UIScrollView实现滑动分页效果

          本文链接:https://www.haomeiwen.com/subject/rvcpqrtx.html