博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
swift轮播图代码
阅读量:6068 次
发布时间:2019-06-20

本文共 4651 字,大约阅读时间需要 15 分钟。

import UIKit

private let CycleCellID = "CycleCellID"

 

class BannerCycleView: UIView {

 

    var layout  : UICollectionViewFlowLayout!

    var collectionView :UICollectionView!

    var pageContol : UIPageControl?

    var cycleTimer : Timer?

  

    let timeInterval : TimeInterval = 2

    

    var cycleModels : [CycleModel]? {

        didSet {

            collectionView.reloadData()

            pageContol?.numberOfPages = cycleModels?.count ?? 0

            let indexPath = IndexPath(item: (cycleModels?.count ?? 0) * 100, section: 0)

            collectionView.scrollToItem(at: indexPath, at: .left, animated: false)

            removeCycleTimer()

            addCycleTimer()

        }

    }

    

    

    override init(frame: CGRect) {

        super.init(frame: frame)

        

            setupUI()

        

    }

    

    required init?(coder aDecoder: NSCoder) {

        fatalError("init(coder:) has not been implemented")

    }

 

}

 

 

extension BannerCycleView {

    func  setupUI() {

        

        self.layout = UICollectionViewFlowLayout()

        self.layout.itemSize = CGSize(width: kScreenW, height: 200)

        self.layout.minimumLineSpacing = 0

        self.layout.minimumInteritemSpacing = 0

        self.layout.scrollDirection = .horizontal

        self.collectionView = UICollectionView.init(frame: self.bounds, collectionViewLayout: self.layout)

        

        self.collectionView.isPagingEnabled = true

        self.collectionView.showsHorizontalScrollIndicator = false

        self.collectionView.delegate = self

        self.collectionView.dataSource = self

        self.collectionView .register(CollectionCycleCell.self, forCellWithReuseIdentifier: CycleCellID)

        self.collectionView.backgroundColor = UIColor.white

        self.addSubview(self.collectionView)

        

        self.pageContol = UIPageControl(frame: CGRect(x: self.collectionView.center.x - 50 , y: 130, width: 100, height: 20))

        self.addSubview(self.pageContol!)

        

    }

 

}

 

 

extension BannerCycleView : UICollectionViewDataSource {

 

    

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        return (cycleModels?.count ?? 0) * 10000

    }

   

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CycleCellID, for: indexPath) as! CollectionCycleCell

                

        print(cycleModels![indexPath.item % cycleModels!.count])

        cell.cycleModel = cycleModels![indexPath.item % cycleModels!.count]

        

        return cell

        

    }

 

}

 

extension BannerCycleView : UICollectionViewDelegate {

 

    func scrollViewDidScroll(_ scrollView: UIScrollView) {

      // 计算偏移量

     let offsetX = scrollView.contentOffset.x + scrollView.bounds.width * 0.5

     

      // 计算页码当前页

        pageContol?.currentPage = Int(offsetX / scrollView.bounds.width) % (cycleModels?.count ?? 1)

        

        

    }

    

    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {

        removeCycleTimer()

    }

    

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

        addCycleTimer()

    }

 

}

 

 

extension BannerCycleView {

  

    fileprivate func addCycleTimer(){

    

        cycleTimer = Timer(timeInterval: 2.0, target: self, selector: #selector(self.scrollToNext), userInfo: nil, repeats: true)

        RunLoop.main.add(cycleTimer!, forMode: .commonModes)

        

    

    }

 

    fileprivate func removeCycleTimer(){

        cycleTimer?.invalidate()

        cycleTimer = nil

    }

    

    @objc fileprivate func scrollToNext() {

        collectionView.setContentOffset(CGPoint(x:collectionView.contentOffset.x + collectionView.bounds.width , y:0), animated: true)

        

    }

    

 

}

 

// ------ CollectionCycleCell

 

import UIKit

 

class CollectionCycleCell: UICollectionViewCell {

    

    var iconImageView: UIImageView!

    

    var titleStringLabel : UILabel!

    

 

    func setupUI() {

        self.backgroundColor = UIColor.white

        

        self.iconImageView = UIImageView()

        self.iconImageView.frame = CGRect(x: 0, y: 0, width: kScreenW, height: 200)

        

        self.titleStringLabel = UILabel()

        self.titleStringLabel.text = ""

        self.titleStringLabel.font = UIFont.systemFont(ofSize: 13)

        self.titleStringLabel.frame = CGRect(x:  0, y:  163, width: iconImageView.frame.width, height: 20)

        self.titleStringLabel.backgroundColor = UIColor.lightGray.withAlphaComponent(0.8)

        

        self.addSubview(iconImageView)

      

        self.iconImageView.addSubview(self.titleStringLabel)

        

    }

    

    

    

    override init(frame: CGRect) {

        super.init(frame: frame)

        

        setupUI()

        

    }

    

    required init?(coder aDecoder: NSCoder) {

        fatalError("init(coder:) has not been implemented")

    }

    

    // MARK: 定义模型属性

    var cycleModel : CycleModel? {

        didSet {

            titleStringLabel.text = cycleModel?.title

            let iconURL = URL(string: cycleModel?.bigimg ?? "")!

            iconImageView.kf.setImage(with: iconURL, placeholder: UIImage(named: "homepage_refresh_tv"))

        }

    }

 

}

 

 

 

//---- model

import UIKit

 

class CycleModel: NSObject {

    var title : String = ""

    var smallimg : String = ""

    var bigimg : String = ""

    

    init(dict : [String : Any]) {

        super.init()

        setValuesForKeys(dict)

    }

    

    override func setValue(_ value: Any?, forUndefinedKey key: String) {}

 

}

 

把埋怨的话放一放,把负能量收一收。太阳喜欢向日葵,人们也会喜欢上爱笑的你。习惯好的自己,一切都会好的。

转载于:https://www.cnblogs.com/supersr/p/5519251.html

你可能感兴趣的文章
《ELK Stack权威指南(第2版)》一3.6 Java日志
查看>>
反射操作公共成员变量
查看>>
linux在文件中查找指定字符串,然后根据查找结果来做进一步的处理
查看>>
小孩的linux
查看>>
CSS3 transforms 3D翻开
查看>>
java基础---->正则表达式
查看>>
2.2013/06/13_log(n)+1
查看>>
关于加载iframe时进度条不消失的问题
查看>>
poj 3984迷宫问题【广搜】
查看>>
oracle ORA-01840:输入值对于日期格式不够长
查看>>
python基础知识~logger模块
查看>>
SIP入门(二):建立SIPserver
查看>>
Servlet3.0的异步
查看>>
WebService连接postgresql( 失败尝试)
查看>>
从头认识java-13.11 对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题?...
查看>>
Python-MacOSX下SIP引起的pip权限问题解决方案(非取消SIP机制)
查看>>
从MFQ方法到需求分析
查看>>
android.view.WindowManager$BadTokenException: Unable to add window
查看>>
HDU5012:Dice(bfs模板)
查看>>
iphone openssh
查看>>