美文网首页iOS开发常用知识点IOS知识积累iOS进阶相关
Swift无限循环滚动,自定义pageControl,flowl

Swift无限循环滚动,自定义pageControl,flowl

作者: Rxiaobing | 来源:发表于2020-12-30 11:49 被阅读0次

    扯淡篇

    各位辕友们,大家好!距离上次在简书写文章已经过去两年多了,这两年里也经历了许多,技术方面只能说是在慢慢进步,真的是很羡慕那些记性好的同学,我这记性现在经常忘东西,导致学习起来也比较吃力,无论怎么样,不抛弃,不放弃,才能有更好的生活,更好的技术!以兹共勉--致一个30+程序员!今天我来给大家推荐我的一个小组件XBSwiftCoreModule,目前已经提交至github大家可以去github下载试用,也欢迎大家给出反馈,以期更好的优化小组件供大家使用!好了废话也不多说了,下面就开始进入正题吧

    正篇

    一、我的第一个小组件 XBListViewManager

    这个组件的主要功能是优化tableview以及collectionview的datasource以及delegate方法,可以省去你写代理以及数据源方法的时间,同时,无需你再关心cell的register问题,我这个小组件会自动帮你注册cell,这样可以在很大程度上减少你的代码量,而且对项目的污染很小,如果你想自己实现数据源与代理方法,只需实现系统的数据源代理方法即可!下面说下我的思路:
    1、采用协议的方式实现cell的动态类型,动态高度
    2、自定义模型遵循协议即可控制cell的类型和高度(XBDataModelProtocol)
    3、会给协议的属性赋有默认值,所以不需要你再重复的写属性协议(使用结构体 XBDataModelComponents 给协议属性添加默认值)
    4、cell(XBCellDataProtocol)和section(XBSectionViewDataProtocol)也需要遵循协议才可以进行赋值,如果你实现了cell和section的代理方法,就会调用代理方法,无需你再写任何有关于代理的代码
    4、支持流水布局

    eg:

    //Model:

        var dataComponents: XBDataModelComponents = XBDataModelComponents()
        
        var movieUrl: String = ""
        var movieName: String = ""
    }
    class SectionModel: XBSectionModelProtocol {
        var dataComponents: XBSectionModelComponents = XBSectionModelComponents()
        
    
        var title = "headerFooter"
    }
    

    //Views:

    class XBMovieCell: UITableViewCell, XBCellDataProtocol {
        deinit {
            print(#function,classForCoder)
        }
        func configureData<T>(item: T) {
            guard let item = item as? DataModel else { return }
            self.textLabel?.text = item.movieName
        }
    }
    class XBMovieSecView: UITableViewHeaderFooterView, XBSectionViewDataProtocol {
        deinit {
            print(#function,classForCoder)
        }
        func configureData<T>(item: T) {
            guard let item = item as? SectionModel else { return }
            textLabel?.text = item.title
        }
    }
    

    //初始化

    lazy var listManager: XBTableManager = {
            let m = XBTableManager()
            m.delegate = self
            return m
        }()
    

    //configureModel

    for (key, value) in data {
                var movie = DataModel()
                movie.movieName = key as! String
                movie.movieUrl = value as! String
                movie.cellClass = NSStringFromClass(XBMovieCell.self)
                movie.cellSize = CGSize(width: 0, height: 60)
                movies.append(movie)
            }
            var sec1 = SectionModel()
            sec1.isClose = true
            sec1.items.append(contentsOf: movies)
            sec1.headerClass = NSStringFromClass(XBMovieSecView.self)
            sec1.footerClass = NSStringFromClass(XBMovieSecView.self)
            sec1.footerSize = CGSize(width: 0, height: 60)
            sec1.headerSize = CGSize(width: 0, height: 60)
            self.listManager.sectionArray = [sec,sec1]
            self.listManager.reloadData()
    

    现在就可以显示自定义多种类型的cell的tableView了
    对于collectionView,我这个库也支持流水布局,并且可以支持横竖滚动,这里不再多说,后面我会做demo演示

    二、我的第二个小组件 XBCircleScroll无限循环滚动

    这个组件的主要功能是实现无限循环滚动,支持自定义滚动视图,只需实现代理方法即可,支持滚动视图的点击事件,并且使用calayer的方式自定义了pageControl,支持点击pagecontrol切换页面,同时pagecontrol支持6种模式,后面会做6种模式的演示,我们先看代码部分
    //初始化

    cirview = XBCircleScrollView(circleViewType: UILabel.self, isUseTimer: true)
            cirview.delegate = self
            cirview.pageControlRightOffSet = 30.0
            view.addSubview(cirview)
            cirview.pageCount = 0
    

    //代理方法

    func XBCircleView(circleView: UIView, configureDataWithIndex index: Int) {
            if let view = circleView as? UILabel {
                view.text = "\(index+1)"
                view.font = UIFont.systemFont(ofSize: 72, weight: .semibold)
                view.textColor = UIColor.orange
                view.textAlignment = .center
            }
        }
    

    三、我的第三个小组件 XBMenuView无限循环滚动

    这个组件的功能也比较简单,就是一个带有下划线的选项卡,目的也就是
    方便大家,废话也不多说,以下是代码部分
    //初始化

    let meneview = XBTopMenuView(titles: ["centerFlow","waterFlow", "leftFlow"], contentSizeType: .equalToSuper, buttonComponents: coms)
    

    //事件处理

    meneview.clickHandle = { [weak self] tag in
             switch tag {
               case 0:
                case 1:
               default:
              }
         }
    

    demo演示

    Simulator Screen Shot - iPhone 11 - 2020-12-30 at 11.38.56.png
    Simulator Screen Shot - iPhone 11 - 2020-12-30 at 11.41.22.png
    XBSwiftCoreModuleDemo.gif

    相关文章

      网友评论

        本文标题:Swift无限循环滚动,自定义pageControl,flowl

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