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