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

首頁 > 系統 > iOS > 正文

iOS Swift利用UICollectionView實現無限輪播功能(原理)詳解

2019-10-21 18:39:37
字體:
來源:轉載
供稿:網友

前言

作為一個資深(自認為)iOS程序猿,會經常用到輪播圖,上一次使用UIScrollView實現無限輪播的效果,這一次在Swift語言中,我使用UICollectionView再為大家講解一次無限輪播的實現原理。

先上圖:

iOS,Swift,UICollectionView,無限輪播
UICollectionView-無限輪播.gif

首先需要實現了就是UICollectionView的分頁,這個很簡單:

collectionView.isPagingEnabled = true

接下來就是原理,在UICollectionView的兩端需要先添加兩張圖片,首段需要添加最后一張圖片,而尾端需要添加第一張圖片,然后在中間的位置上一次添加各個圖片。這個其實是很容易實現的:

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ImageCollectionViewCell", for: indexPath) as! ImageCollectionViewCell  /// 給圖片賦值(在首尾分別添加兩張圖片) if (indexPath.row == 0) {  cell.imageName = imageNameList.last } else if (indexPath.row == self.imageNameList.count + 1) {  cell.imageName = imageNameList.first } else {  cell.imageName = imageNameList[indexPath.row - 1] }  return cell }

這樣在滑動的時候,通過偏移量就可以實現無限輪播的效果了。當滑動停止時判斷偏移量,當偏移量為0時(視圖上顯示的是最后一張圖片),這時候就直接調動調整偏移量的方法,把UICollectionView偏移到最后一張圖片的位置?;瑒拥轿捕藭r是同理。

 func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { /// 當UIScrollView滑動到第一位停止時,將UIScrollView的偏移位置改變 if (scrollView.contentOffset.x == 0) {  scrollView.contentOffset = CGPoint(x: CGFloat(self.imageNameList.count) * kScreenWidth,y: 0)  self.pageControl.currentPage = self.imageNameList.count  /// 當UIScrollView滑動到最后一位停止時,將UIScrollView的偏移位置改變 } else if (scrollView.contentOffset.x == CGFloat(self.imageNameList.count + 1) * kScreenWidth) {  scrollView.contentOffset = CGPoint(x: kScreenWidth,y: 0)  self.pageControl.currentPage = 0 } else {  self.pageControl.currentPage = Int(scrollView.contentOffset.x / kScreenWidth) - 1 } }

其實原理很簡單,個人認為使用UICollectionView實現無限輪播比起UIScrollView更加實用并且便于維護,接下來我將代碼全部列一下:

import UIKitlet kScreenWidth = UIScreen.main.bounds.widthclass ViewController: UIViewController {  lazy var collectionView: UICollectionView = { let flowLayout = UICollectionViewFlowLayout() flowLayout.minimumLineSpacing = 0 flowLayout.minimumInteritemSpacing = 0 flowLayout.scrollDirection = .horizontal flowLayout.itemSize = CGSize(width: kScreenWidth, height: 200)  let collectionView = UICollectionView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 200), collectionViewLayout: flowLayout)  collectionView.isPagingEnabled = true collectionView.showsHorizontalScrollIndicator = false collectionView.backgroundColor = UIColor.white collectionView.delegate = self collectionView.dataSource = self self.view.addSubview(collectionView)  return collectionView }()  lazy var pageControl: UIPageControl = { let pageControl = UIPageControl(frame: CGRect(x: 0, y: 150, width: kScreenWidth, height: 50))  pageControl.numberOfPages = self.imageNameList.count pageControl.currentPage = 0  pageControl.tintColor = UIColor.black pageControl.pageIndicatorTintColor = UIColor.gray;  return pageControl; }()  lazy var imageNameList: [String] = { let imageList = ["image0", "image1", "image2", "image3"]  return imageList }() override func viewDidLoad() { super.viewDidLoad()  setupController() }  func setupController() { /// 設置數據 collectionView.register(ImageCollectionViewCell.self, forCellWithReuseIdentifier: "ImageCollectionViewCell")  collectionView.reloadData() collectionView.scrollToItem(at: IndexPath(row: 1, section: 0), at: .left, animated: false)  self.view.addSubview(pageControl) }}extension ViewController: UICollectionViewDataSource {  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { /// 這步只是防止崩潰 if (imageNameList.count == 0) {  return 0 } return imageNameList.count + 2 }  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ImageCollectionViewCell", for: indexPath) as! ImageCollectionViewCell  /// 給圖片賦值(在首尾分別添加兩張圖片) if (indexPath.row == 0) {  cell.imageName = imageNameList.last } else if (indexPath.row == self.imageNameList.count + 1) {  cell.imageName = imageNameList.first } else {  cell.imageName = imageNameList[indexPath.row - 1] }  return cell } }extension ViewController: UICollectionViewDelegate {  func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { /// 當UIScrollView滑動到第一位停止時,將UIScrollView的偏移位置改變 if (scrollView.contentOffset.x == 0) {  scrollView.contentOffset = CGPoint(x: CGFloat(self.imageNameList.count) * kScreenWidth,y: 0)  self.pageControl.currentPage = self.imageNameList.count  /// 當UIScrollView滑動到最后一位停止時,將UIScrollView的偏移位置改變 } else if (scrollView.contentOffset.x == CGFloat(self.imageNameList.count + 1) * kScreenWidth) {  scrollView.contentOffset = CGPoint(x: kScreenWidth,y: 0)  self.pageControl.currentPage = 0 } else {  self.pageControl.currentPage = Int(scrollView.contentOffset.x / kScreenWidth) - 1 } } }/// collectionView圖片的cellclass ImageCollectionViewCell: UICollectionViewCell {  /// 顯示的圖片 let imageView = UIImageView() var imageName: String? = "" { didSet {  if let name = imageName {  imageView.image = UIImage(named: name)  } } }  override init(frame: CGRect) { super.init(frame: frame)  setupCell(); }  /// 初始化視圖 func setupCell() { imageView.frame = self.bounds contentView.addSubview(imageView) }  required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } }

 

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区在线| 中文字幕国产亚洲2019| 韩国三级电影久久久久久| 欧美xxxx18国产| 色悠悠国产精品| 92裸体在线视频网站| 97视频免费在线观看| 欧美精品一区二区三区国产精品| 成人网欧美在线视频| 51久久精品夜色国产麻豆| 一区二区在线视频播放| 欧美成人一区二区三区电影| 欧美亚洲国产视频小说| 亚洲美女精品成人在线视频| 欧美性xxxx18| 欧美成人一区二区三区电影| 狠狠躁夜夜躁人人躁婷婷91| 日韩精品中文字幕有码专区| 亚洲黄色av女优在线观看| 国产精品久久久久久影视| 国产精品欧美激情| 成人激情电影一区二区| 91精品国产91久久久久久久久| 日韩精品极品毛片系列视频| 一本色道久久88综合亚洲精品ⅰ| 亚洲男人天堂久| 精品视频www| 中文字幕精品久久久久| 国产女同一区二区| 色综合视频一区中文字幕| 97国产成人精品视频| 欧美理论在线观看| 亚洲免费精彩视频| 国产精品久久久久久亚洲影视| 日韩国产精品亚洲а∨天堂免| 欧美日韩激情视频8区| 久久久精品2019中文字幕神马| 黄色精品一区二区| 中文字幕一区二区精品| 国产日韩欧美在线观看| 亚洲精品一区中文| 国产成人综合久久| 亚洲激情视频网| 欧美亚洲另类在线| 久久综合色影院| 日韩免费在线视频| 亚洲色图校园春色| 91九色综合久久| 中文字幕视频一区二区在线有码| 欧美日韩国产精品一区| 正在播放国产一区| 亚洲国产另类久久精品| www.久久久久| 69国产精品成人在线播放| 国产日韩欧美影视| 北条麻妃在线一区二区| 亚洲国产天堂久久综合| 亚洲欧洲在线视频| 欧洲亚洲在线视频| 精品久久久久久久久久久| 亚洲男人天堂古典| 亚洲成人激情在线| 亚洲夜晚福利在线观看| 青草热久免费精品视频| 伊人久久男人天堂| 欧美激情欧美狂野欧美精品| 欧美日韩精品国产| 欧美裸体xxxx| 国内久久久精品| 欧美精品国产精品日韩精品| 久久久视频在线| 欧美色视频日本高清在线观看| 欧美中文字幕视频在线观看| 欧美大片va欧美在线播放| 日韩电影免费观看在线| 欧美在线观看网站| 国产网站欧美日韩免费精品在线观看| 综合136福利视频在线| 国产一区二区日韩| 久久艹在线视频| 亚洲精品短视频| 奇米四色中文综合久久| 久久69精品久久久久久久电影好| 久久久久久亚洲精品不卡| 色噜噜狠狠狠综合曰曰曰| 久久99国产精品自在自在app| 亚洲摸下面视频| 97精品在线观看| 国产免费成人av| 久久久久久久亚洲精品| 日本精品一区二区三区在线| 亚洲综合日韩在线| 亚洲一区亚洲二区亚洲三区| 在线观看视频亚洲| 亚洲国产精品女人久久久| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲天堂精品在线| 国产精品久久久999| 国产日韩欧美91| 麻豆成人在线看| 亚洲网站在线看| 亚洲国产成人久久综合一区| 精品久久久精品| 亚洲乱码国产乱码精品精| 欧美精品在线免费观看| 欧美性受xxxx黑人猛交| 亚洲曰本av电影| 国产精品亚洲欧美导航| 国产suv精品一区二区三区88区| 精品亚洲永久免费精品| 日韩www在线| 亚洲精品动漫100p| 国产成人精品亚洲精品| 亚洲乱码国产乱码精品精天堂| 自拍视频国产精品| 欧美精品久久久久a| 韩国国内大量揄拍精品视频| 国产精品国产福利国产秒拍| 97av在线视频| 91香蕉嫩草神马影院在线观看| 日本国产高清不卡| 欧美野外wwwxxx| 欧美日韩中文字幕在线| 亚洲第一精品福利| 91亚洲va在线va天堂va国| 日韩hd视频在线观看| 欧美成人精品一区二区| 亚洲国产婷婷香蕉久久久久久| 成人性生交xxxxx网站| 亚洲乱码一区av黑人高潮| 久久av在线播放| 成人在线免费观看视视频| 国产日韩欧美黄色| 国产精品亚洲自拍| 亚洲精品国产精品乱码不99按摩| 久久久久久91香蕉国产| 精品日本美女福利在线观看| 国产精品aaaa| 北条麻妃一区二区在线观看| 国产成人jvid在线播放| 中文字幕在线看视频国产欧美在线看完整| 狠狠做深爱婷婷久久综合一区| 欧美激情亚洲国产| 精品亚洲aⅴ在线观看| 精品国产一区久久久| 97精品一区二区视频在线观看| 97免费在线视频| 欧洲成人在线视频| 欧美丰满老妇厨房牲生活| 97成人精品区在线播放| 日韩精品免费在线播放| 国产精品免费看久久久香蕉| 欧美视频一区二区三区…| 亚洲精品久久7777777| 毛片精品免费在线观看| 国产亚洲精品一区二555| 亚洲精品欧美日韩专区| 国产小视频国产精品| 久久人人爽人人爽爽久久| 亚洲午夜精品久久久久久久久久久久| 国产女精品视频网站免费| 中文字幕精品—区二区| 国产综合福利在线| 九九热精品视频|