美文网首页
Ios 自定义DatePicker

Ios 自定义DatePicker

作者: 暴躁的小豆子 | 来源:发表于2019-07-24 20:44 被阅读0次

由于系统的UIDatePicker和UIPickerView 都是当前选中的 近 其他的远的效果,未能满足项目需求 ,就想着自定义来解决

首先贴上效果图

效果图

我采用的是 左右分别是两个列表,拿到中间的cell的坐标,改变数据的状态,刷新列表达到效果(这里需要注意的是 手势 问题 突然松手,跟慢慢松手调用的scrollview代理不一样)上代码

// 突然松手 执行  慢慢松手不执行 执行下一个方法

    func scrollViewDidEndDecelerating(_scrollView:UIScrollView) {

        scrollToItem(scrollView)

    }

    //拖拽超过cell高度一半 就跳 下一个 或者上一个

    func scrollViewDidEndDragging(_scrollView:UIScrollView, willDecelerate decelerate:Bool) {// 手拖拽cell着滑 decelerate 是false  手猛滑一下 给他一个自己减速的过程 是true

        ifdecelerate ==false{//当手拖动的时候(没有自己减速效果)

            scrollToItem(scrollView)

        }

        // 为什么在没有减速效果的时候 调用呢  是因为 如果有减速效果的话 会执行scrollViewDidEndDecelerating 这个滑动停止方法

    }

再者 判断当前滚动的偏移量 是否是cell高度的倍数

 // 整体滚动item 超过item 一半的偏移量 就跳下一个 否则还是当前

   private func scrollToItem(_scrollView:UIScrollView){

        lety :CGFloat= scrollView.contentOffset.y

        letspace =Int(y)%Int(rowH)

        varrow :Int=0

        ifspace>=(Int(rowH)/2){

            row =Int(y/rowH+1)

        }else{

            row =Int(y/rowH)

        }

        ifscrollView.isEqual(leftTableView){

            if y==0{// 偏移量为0 的时候 主动更改颜色

                changeCurrentItemColor(leftTableView)

            }

            self.leftTableView.setContentOffset(CGPoint(x:0, y:CGFloat(row) *rowH), animated:true)

        }else{

            if y==0{

                changeCurrentItemColor(rightTableView)

            }

            self.rightTableView.setContentOffset(CGPoint(x:0, y:CGFloat(row) *rowH), animated:true)

        }

    }

  拿到中心坐标 更改数据源 刷新列表

let x = ((UIDevice.width()-100)/55*61-120)/2// 列表一半的高度

 let  index =leftTableView.indexPathForRow(at:CGPoint(x:0, y: scrollView.contentOffset.y+x))//中心展示的item

gitHub

实现效果

   

效果图

相关文章

网友评论

      本文标题:Ios 自定义DatePicker

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