Cómo agregar PageControl dentro de UICollectionView Image Scrolling

Hola, tengo los códigos de listdo de imágenes horizontales UICollectionView quiero agregar PageControl cuando se PageControl imágenes de desplazamiento, agregué el selector de IBOutlet e IBOutlet pero, ¿cómo puedo integrarlo? entre UICollecitonView . ?

Mis códigos debajo de abajo.

  class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { @IBOutlet weak var View : DesignableView! @IBOutlet var collectionView: UICollectionView! @IBOutlet var collectionViewLayout: UICollectionViewFlowLayout! @IBOutlet open weak var pageControl: UIPageControl? { didSet { pageControl?.addTarget(self, action: #selector(ViewController.pageChanged(_:)), for: .valueChanged) } } override func viewDidLoad() { super.viewDidLoad() pageControl?.numberOfPages = 11 } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 11; } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell: ImageCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "ImageCollectionViewCell", for: indexPath) as! ImageCollectionViewCell cell.label.text = "Cell \(indexPath.row)" cell.backgroundImageView.image = UIImage(named: "Parallax \(indexPath.row + 1)") // Parallax cell setup cell.parallaxTheImageViewScrollOffset(self.collectionView.contentOffset, scrollDirection: self.collectionViewLayout.scrollDirection) return cell } @IBAction open func pageChanged(_ sender: UIPageControl) { print(sender.currentPage) } // MARK: Delegate func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { return collectionView.bounds.size; } // MARK: Scrolling func scrollViewDidScroll(_ scrollView: UIScrollView) { // Parallax visible cells for cell: ImageCollectionViewCell in collectionView.visibleCells as! [ImageCollectionViewCell] { cell.parallaxTheImageViewScrollOffset(self.collectionView.contentOffset, scrollDirection: self.collectionViewLayout.scrollDirection) } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

Aquí tiene una class completa con pagination Control de página en una vista de colección horizontal. Esto está funcionando en una de mis aplicaciones, ahora mismo, y está funcionando correctamente. Si no puede hacer que funcione, no dude en preguntarme y le ayudaré.

Primero, en el Storyboard debes configurar tu CollectionView con:

Diseño : flujo
Desplazamiento Dirección : Horizontal
Desplazamiento habilitado
Paging habilitado

 @IBOutlet weak var collectionView: UICollectionView! //img: 77 @IBOutlet weak var pageControl: UIPageControl! var thisWidth:CGFloat = 0 override func awakeFromNib() { super.awakeFromNib() thisWidth = CGFloat(self.frame.width) collectionView.delegate = self collectionView.dataSource = self pageControl.hidesForSinglePage = true } func numberOfSections(in collectionView: UICollectionView) -> Int { return 10 } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 1 } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "YourCell", for: indexPath) return cell } func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { self.pageControl.currentPage = indexPath.section } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { thisWidth = CGFloat(self.frame.width) return CGSize(width: thisWidth, height: self.frame.height) } 

No soy fan de la respuesta aceptada. De vez en cuando, la willDisplay cell mostrará la página incorrecta para el control de la página según la interacción de los usuarios.

Lo que uso:

 func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { pageControl.currentPage = Int(scrollView.contentOffset.x) / Int(scrollView.frame.width) } 

Esto actualizará la página después de que el usuario haya terminado de desplazarse, haciendo que la página currentPage de pageControl más precisa.