扯淡篇
各位轅友們,大家好!距離上次在簡書寫文章已經(jīng)過去兩年多了,這兩年里也經(jīng)歷了許多,技術(shù)方面只能說是在慢慢進(jìn)步,真的是很羨慕那些記性好的同學(xué),我這記性現(xiàn)在經(jīng)常忘東西,導(dǎo)致學(xué)習(xí)起來也比較吃力,無論怎么樣,不拋棄,不放棄,才能有更好的生活,更好的技術(shù)!以茲共勉--致一個30+程序員!今天我來給大家推薦我的一個小組件XBSwiftCoreModule,目前已經(jīng)提交至github大家可以去github下載試用,也歡迎大家給出反饋,以期更好的優(yōu)化小組件供大家使用!好了廢話也不多說了,下面就開始進(jìn)入正題吧
正篇
一、我的第一個小組件 XBListViewManager
這個組件的主要功能是優(yōu)化tableview以及collectionview的datasource以及delegate方法,可以省去你寫代理以及數(shù)據(jù)源方法的時間,同時,無需你再關(guān)心cell的register問題,我這個小組件會自動幫你注冊cell,這樣可以在很大程度上減少你的代碼量,而且對項目的污染很小,如果你想自己實(shí)現(xiàn)數(shù)據(jù)源與代理方法,只需實(shí)現(xiàn)系統(tǒng)的數(shù)據(jù)源代理方法即可!下面說下我的思路:
1、采用協(xié)議的方式實(shí)現(xiàn)cell的動態(tài)類型,動態(tài)高度
2、自定義模型遵循協(xié)議即可控制cell的類型和高度(XBDataModelProtocol)
3、會給協(xié)議的屬性賦有默認(rèn)值,所以不需要你再重復(fù)的寫屬性協(xié)議(使用結(jié)構(gòu)體 XBDataModelComponents 給協(xié)議屬性添加默認(rèn)值)
4、cell(XBCellDataProtocol)和section(XBSectionViewDataProtocol)也需要遵循協(xié)議才可以進(jìn)行賦值,如果你實(shí)現(xiàn)了cell和section的代理方法,就會調(diào)用代理方法,無需你再寫任何有關(guān)于代理的代碼
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()
現(xiàn)在就可以顯示自定義多種類型的cell的tableView了
對于collectionView,我這個庫也支持流水布局,并且可以支持橫豎滾動,這里不再多說,后面我會做demo演示
二、我的第二個小組件 XBCircleScroll無限循環(huán)滾動
這個組件的主要功能是實(shí)現(xiàn)無限循環(huán)滾動,支持自定義滾動視圖,只需實(shí)現(xiàn)代理方法即可,支持滾動視圖的點(diǎn)擊事件,并且使用calayer的方式自定義了pageControl,支持點(diǎn)擊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無限循環(huán)滾動
這個組件的功能也比較簡單,就是一個帶有下劃線的選項卡,目的也就是
方便大家,廢話也不多說,以下是代碼部分
//初始化
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演示


