美文网首页
swift 滑动视图结构组件

swift 滑动视图结构组件

作者: 怀心逝水 | 来源:发表于2018-12-08 21:11 被阅读86次

还是老规矩,先看效果图


slider.gif

当然我这些代码是在别人的基础上整理出来的,就这个滑动的时候文字大小和颜色的变化。

用法:

1.继承RSSliderVC控制器。
2.需要添加你头部视图,如果是每个标题是固定宽度就设置,若不是就不用设置。
3.配置标签的数据(typeMdoel),就是头部的标题。
4.override func addChildViewController()的重写。

解读:

RSSliderVC

D5F061DF-9292-4FFD-A952-9636C72AC61C.png

该Controller的逻辑框架是上图那样,当然主要的就是两个scrollerView的联动,以及头部标题的变化。

extension RSSlideVC: UIScrollViewDelegate {
    
    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        
        let idx: Int = Int(contentScrollView.contentOffset.x / SCREEN_WIDTH)
        setUpOneChildController(idx: idx)
    }
    
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        
        segmentView.selectedIdx = nextIndex()
        segmentView.titleScrollViewDidScroll(scrollView)
    }
    
    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        
        segmentView.titleScrollViewWillBeginDragging(scrollView)
    }
}

当然这是Controller中滑动视图的代理方法,我们通过这些方法把两者联动起来。

RSExgSegmentView

这个就是头部的标签视图组件,这个组件的代码就有些复杂,但它需要处理的逻辑有:

1.视图结构:有scrollerView,button。
2.动作:滑动以及点击
3.变化:文字大小和颜色的渐变
4.联动:就是上面说的两个ScrollerView的联动。

就说说重点的吧,就是动作的时候,通过联动,使组件中的元素变化,就举个滑动的动作吧。

    func titleScrollViewDidScroll(_ scrollView: UIScrollView) {
        
        scrollViewDidScrollOffsetX(scrollView.contentOffset.x)
    }

    private func scrollViewDidScrollOffsetX(_ offsetX: CGFloat)  {
        
        buttonStateChangeOffsetX(offsetX)
        
        if currentIndex != selectedIdx {
            
            setupSlierScrollToCenter(offsetX: offsetX, index: selectedIdx)
            
            if isClick {
                
                let upButton = buttonArr[currentIndex]
                let currentButton = buttonArr[selectedIdx]
                
                UIView.animate(withDuration: 0.2, animations: {
                    
                    currentButton.transform = CGAffineTransform(scaleX: self.scale , y: self.scale)
                    upButton.transform = CGAffineTransform(scaleX: 1.0 , y: 1.0 )
                })
                
                setupButtonStatusAnimation(upButton: upButton, currentButton: currentButton)
                
            }
            
            currentIndex = selectedIdx
        }
        
        isClick = false
    }

这里是核心的部分,主要buttonStateChangeOffsetX这个方法中主要是获取当前已经选择的按钮和下一个要选择的按钮,根据滑动的offset做变化。

        let scaleDelta = (scale - 1.0) * progress
        currentButton.transform = CGAffineTransform(scaleX: scale - scaleDelta, y: scale - scaleDelta)
        nextButton.transform = CGAffineTransform(scaleX: 1.0 + scaleDelta, y: 1.0 + scaleDelta)

setupSlierScrollToCenter这个是设置scrollerView滑动到中心位置。

其余的就是一些逻辑的判断了,我这儿就不多介绍了。

最后给个GitHub上的Demo的地址

Demo

相关文章

  • swift 滑动视图结构组件

    还是老规矩,先看效果图 当然我这些代码是在别人的基础上整理出来的,就这个滑动的时候文字大小和颜色的变化。 用法: ...

  • 图片列表

    图片分享按钮改造 新建PhotoList 组件,导入路由组件 绘制图片列表组件页面结构 滑动条无法滑动的问题在Ph...

  • 小程序《音乐播放器》中组件的使用

    1. swiper组件、scroll-view组件 swiper组件编写滑动页面结构 swiper组件常用属性 i...

  • 数据驱动视图

    数据驱动视图 状态: 数据结构设计(React-state, Vue-data) 视图: 组件结构和拆分 stat...

  • Vue中 Actionsheet组件 事件透传问题

    1.我们如果对Actionsheet 组件没有滑动的要求,而且父视图也不能跟随这个滑动, 可以直接在蒙版上面添加一...

  • iOS 解决UIScrollerView嵌套滑动视图手势冲突的三

    视图结构:image.png 方案一 : 纵向滑动ScrollView联动嵌套的数据列表滑动 1.将三个数据列表全...

  • Swift 路由组件

    GTMRouter GTMRouter 用Swift实现的视图控制器路由组件,简单易用!!! 实例 直接下载代码,...

  • ionic ion-slide 高度问题

    用ion-slide封装滑动视图组件,进行滑动导航相关操作,每一个slide下都会放一个页面,每个页面的高度又是不...

  • 微信小程序

    项目结构框架机理界面布局核心组件核心接口 1. 项目结构 2. 框架机理 3. 界面布局 4. 核心组件 视图容器...

  • 设置tableview滑动至无内容时停止滑动

    效果为:使用tableView创建视图,顶部禁止滑动,当前视图滑动到底部之后,则停止滑动。 scrollViewD...

网友评论

      本文标题:swift 滑动视图结构组件

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