亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOScollectionView廣告無限滾動實例(Swift實現)

2020-07-26 03:05:08
字體:
來源:轉載
供稿:網友

今天公司里的實習生跑過來問我一般App上廣告的無限滾動是怎么實現的,剛好很久沒寫博客了,就決定寫下了,盡量幫助那些處于剛學iOS的程序猿.

做一個小demo,大概實現效果如下圖所示:

基本實現思路:

1. 在你需要放置無限滾動展示數據的地方把他的數據,在原本的基礎上把你要展示的數據擴大三倍.(當然擴大兩倍也是可以的,三倍的話,比較好演示)

  // MARK: - 設置數據源  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {//    print(self.arrayM.count)    return self.arrayM.count * 3  }

2.當在定時器的作用下,或者在拖動情況存下滾動到第八個時候,設置此時的collectionView.contentOffset.x等于滾動到第三個cell的contentOffset.x

if collectionView.contentOffset.x == CGFloat(3 * self.arrayM.count - 1) * self.collectionView.bounds.width {      self.collectionView.contentOffset.x = CGFloat(self.arrayM.count - 1) * self.collectionView.bounds.width    }

3.當拖動到第0個cell時,設置此時的collectionView.contentOffset.x等于第六個cell的contentOffset.x

if collectionView.contentOffset.x == 0 {      self.collectionView.contentOffset.x = CGFloat(2 * self.arrayM.count - 1) * self.collectionView.bounds.width          }

代碼如下:

我在代碼中用到5張照片,所以應該一共有15個cell

import UIKitclass ViewController: UIViewController ,UICollectionViewDataSource, UICollectionViewDelegate {  @IBOutlet weak var collectionView: UICollectionView!  var timer : Timer?  var arrayM : [BOModel] = [] {    didSet {      self.collectionView.reloadData()    }  }  static let CellID = "cell"  override func viewDidLoad() {    super.viewDidLoad()        self.collectionView.dataSource = self    self.collectionView.delegate = self    // 加載數據    loadData()    self.collectionView.register(UINib.init(nibName: "BOCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: ViewController.CellID)        //設置collextionView    setupCollectionView()        // 開啟定時器    starTimer()      }  /// 從polist中加載數據  func loadData() {    let stemp: NSArray = NSArray(contentsOfFile: Bundle.main.path(forResource: "shops.plist", ofType: nil)!)!        for dict in stemp {      let model = BOModel.init(dict: dict as! [String : Any])            self.arrayM.append(model)    }  }  /// 設置cellection的布局方式  ///  /// - Returns: 一個布局類型  func setupCollectionFlowlayout() -> (UICollectionViewFlowLayout) {    let flowLayout = UICollectionViewFlowLayout()    flowLayout.itemSize = self.collectionView.bounds.size    flowLayout.minimumLineSpacing = 0    flowLayout.minimumInteritemSpacing = 0    flowLayout.scrollDirection = .horizontal    flowLayout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0)    return flowLayout  }    /// 設置collectionVIew  func setupCollectionView() -> () {        self.collectionView.collectionViewLayout = self.setupCollectionFlowlayout()    self.collectionView.showsVerticalScrollIndicator = false    self.collectionView.showsHorizontalScrollIndicator = false    self.collectionView.isPagingEnabled = true      }    // MARK: - 設置數據源  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {//    print(self.arrayM.count)    return self.arrayM.count * 3  }    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {    let cell = self.collectionView.dequeueReusableCell(withReuseIdentifier: ViewController.CellID, for: indexPath) as! BOCollectionViewCell        cell.model = self.arrayM[indexPath.row % self.arrayM.count]    return cell  }    // MARK: - 實現代理方法  func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {    //contentOffset.x == 0 時,重新設置contentOffset.x的值    if collectionView.contentOffset.x == 0 {      self.collectionView.contentOffset.x = CGFloat(2 * self.arrayM.count - 1) * self.collectionView.bounds.width          }    //當到達最后一個cell時,重新設置contentOffset.x的值    if collectionView.contentOffset.x == CGFloat(3 * self.arrayM.count - 1) * self.collectionView.bounds.width {      self.collectionView.contentOffset.x = CGFloat(self.arrayM.count - 1) * self.collectionView.bounds.width    }      }      /// 開啟定時器  func starTimer () {    let timer = Timer.init(timeInterval: 1, target: self, selector: #selector(ViewController.nextPage), userInfo: nil, repeats: true)    // 這一句代碼涉及到runloop 和 主線程的知識,則在界面上不能執行其他的UI操作    RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)        self.timer = timer      }    /// 在1秒后,自動跳轉到下一頁  func nextPage() {    // 如果到達最后一個,則變成第四個    if collectionView.contentOffset.x == CGFloat(3 * self.arrayM.count - 1) * self.collectionView.bounds.width {      self.collectionView.contentOffset.x = CGFloat(self.arrayM.count - 1) * self.collectionView.bounds.width    }else {      // 每過一秒,contentOffset.x增加一個cell的寬度      self.collectionView.contentOffset.x += self.collectionView.bounds.size.width    }}      /// 當collectionView開始拖動的時候,取消定時器  func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {    self.timer?.invalidate()    self.timer = nil  }    /// 當用戶停止拖動的時候,開啟定時器  func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {    starTimer()  }}

plist文件如下圖所示:

用到的字典轉模型因為比較簡單的轉換,就自己寫了個:

import UIKitclass BOCollectionViewCell: UICollectionViewCell {  @IBOutlet weak var imageView: UIImageView!  var model : BOModel? {    didSet {      guard let image = UIImage.init(named: (model?.name)!) else {        return      }                  self.imageView.image = image    }  }  override func awakeFromNib() {    super.awakeFromNib()   }}

自定義collectionViewCell類中的內容:

import UIKitclass BOCollectionViewCell: UICollectionViewCell {  @IBOutlet weak var imageView: UIImageView!  var model : BOModel? {    didSet {      guard let image = UIImage.init(named: (model?.name)!) else {        return      }                  self.imageView.image = image    }  }  override func awakeFromNib() {    super.awakeFromNib()   }}

附: 其實這種方法比較實現無限滾動,利用了一點小技巧,用電腦測試的時候可能有一點缺陷.

原文鏈接:http://www.cnblogs.com/muzichenyu/p/6071757.html

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色无极亚洲影院| 久久精品一区中文字幕| 亚洲高清色综合| 欧美性猛交丰臀xxxxx网站| 青青久久av北条麻妃海外网| 亚洲男人第一av网站| 狠狠色狠色综合曰曰| 亚洲欧美激情一区| 成人免费视频在线观看超级碰| 欧美视频不卡中文| 国产亚洲精品久久久久久牛牛| 91香蕉嫩草影院入口| 亚洲国产精品免费| 国产欧美在线观看| 日韩精品在线视频| 成人性生交大片免费看小说| 欧美多人乱p欧美4p久久| 日韩三级成人av网| 日韩极品精品视频免费观看| 在线播放日韩av| 精品一区二区三区四区| 亚洲国产另类久久精品| 亚洲精品成人av| 亚洲第一区在线| 国产精品高清免费在线观看| 国产精品露脸av在线| 欧美成人午夜影院| 欧美日韩在线视频一区| 26uuu亚洲伊人春色| 欧美高清在线播放| 日本精品视频在线观看| 久久免费国产精品1| 欧美精品videossex性护士| 欧美极品少妇xxxxx| 精品久久久国产| 国产亚洲精品久久久| 欧美激情一区二区三区高清视频| 136fldh精品导航福利| 午夜精品福利电影| 日韩欧美国产视频| 亚洲国产成人在线视频| 91久久国产综合久久91精品网站| 久久免费观看视频| 日韩激情第一页| 国产一区二区在线播放| 日韩中文理论片| 国产视频精品xxxx| 欧美电影第一页| 琪琪亚洲精品午夜在线| 91在线免费观看网站| 亚洲高清一二三区| 久久久久久噜噜噜久久久精品| 欧美精品激情在线观看| 美日韩精品免费视频| 日韩中文在线视频| 国产欧美一区二区白浆黑人| 一区二区欧美激情| 欧美疯狂做受xxxx高潮| 国产精品大陆在线观看| 国产香蕉精品视频一区二区三区| 中文字幕av一区| 国产精品第一第二| 91国产一区在线| 国外色69视频在线观看| 欧美中文字幕视频| 国产中文欧美精品| 亚洲永久免费观看| 亚洲国产成人在线播放| 91wwwcom在线观看| 97色在线观看| 中文字幕亚洲字幕| 亚洲精品午夜精品| 一区二区三区四区精品| 日本精品视频网站| 国产视频久久久久久久| 国产欧美精品一区二区| 亚洲精品久久视频| 国产日韩欧美日韩| 亚洲国产精品成人精品| 中文字幕日韩高清| 久久免费少妇高潮久久精品99| 国产欧美在线看| 日韩欧美国产中文字幕| 亚洲综合最新在线| 成人黄色午夜影院| 国产精品户外野外| 美女视频黄免费的亚洲男人天堂| xvideos亚洲| 国产91精品不卡视频| 日韩中文字幕亚洲| 成人欧美在线视频| 国产精品久久久久久网站| 国产mv久久久| 亚洲精品欧美极品| 国产精品久久久久久久天堂| 欧美激情综合色综合啪啪五月| 亚洲成人1234| 在线性视频日韩欧美| 国产一区二区三区四区福利| 久久久在线免费观看| 成人福利视频在线观看| 夜色77av精品影院| 97在线日本国产| 久久精品一区中文字幕| 欧美日本在线视频中文字字幕| 日韩高清免费观看| 亚洲毛茸茸少妇高潮呻吟| 精品国产鲁一鲁一区二区张丽| 日韩在线观看电影| 国产成+人+综合+亚洲欧洲| 久久香蕉国产线看观看av| 欧美刺激性大交免费视频| 欧美激情视频在线免费观看 欧美视频免费一| 性色av一区二区三区免费| 精品国产乱码久久久久久婷婷| 亚洲成人av在线| 久久久亚洲国产天美传媒修理工| 欧美日韩综合视频| 日韩精品在线视频| 亚洲一二三在线| 精品久久久久久中文字幕一区奶水| 日韩高清a**址| 亚洲国产成人精品女人久久久| 91精品国产一区| 国产精品永久免费视频| 国产在线久久久| 国产精国产精品| 91人人爽人人爽人人精88v| 一本大道香蕉久在线播放29| 欧美一区三区三区高中清蜜桃| 精品福利在线观看| 日本成人在线视频网址| 国产精品精品久久久| 日韩中文字幕免费看| 亚洲第一福利在线观看| 久久亚洲精品视频| 少妇高潮 亚洲精品| 国产欧美日韩精品丝袜高跟鞋| 欧美激情2020午夜免费观看| 精品无人区乱码1区2区3区在线| 亚洲加勒比久久88色综合| 亚洲天堂av在线免费观看| 色播久久人人爽人人爽人人片视av| 欧美一级电影免费在线观看| 国产精品99久久久久久白浆小说| 欧美又大粗又爽又黄大片视频| 亚洲色图av在线| 亚洲国产毛片完整版| 国产一区二中文字幕在线看| 欧美日韩在线视频首页| 久久91亚洲精品中文字幕奶水| 亚州国产精品久久久| 在线观看精品国产视频| 亚洲精品福利在线| 成人精品视频久久久久| 国产欧美精品在线| 欧美激情一区二区三区在线视频观看| 亚洲一区二区免费| 欧美性xxxx极品高清hd直播| 久久久黄色av| 亚洲激情国产精品| 日韩av色在线| 日韩在线视频观看| 国产成人精品日本亚洲专区61|