阅读 162

Swift无限循环滚动,自定义pageControl,flowlayout流水布局

扯淡篇

各位辕友们,大家好!距离上次在简书写文章已经过去两年多了,这两年里也经历了许多,技术方面只能说是在慢慢进步,真的是很羡慕那些记性好的同学,我这记性现在经常忘东西,导致学习起来也比较吃力,无论怎么样,不抛弃,不放弃,才能有更好的生活,更好的技术!以兹共勉--致一个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

作者:Rxiaobing

原文链接:https://www.jianshu.com/p/a4417e4e8d97

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐