Swift無限循環(huán)滾動,自定義pageControl,flowlayout流水布局

扯淡篇

各位轅友們,大家好!距離上次在簡書寫文章已經(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演示

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容