0
votes

Le contrôle de page change de page avant de passer complètement à la page suivante

J'ai créé un contrôle de page pour une vue de collection, chaque cellule de vue de collection correspond à la hauteur et à la largeur de l'écran. Voici la configuration du contrôle de page:

// Setup the page control
func setupPageControl() {

    pageControl.pageIndicatorTintColor = cellColor
    pageControl.currentPageIndicatorTintColor = themeColor

    view.addSubview(pageControl)
    addPageControlConstraints()
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    pageControl.numberOfPages = collectionViewCellData.count
    return collectionViewCellData.count
}

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    pageControl.currentPage = indexPath.row
}

Il y a un petit problème avec le contrôle de page, vérifiez ceci:

 Enregistrement d'écran a >

Remarquez comment le contrôle de la page change lorsque je ne suis même pas complètement allé à la page suivante, comment puis-je résoudre ce problème?


1 commentaires

peut-être avez-vous besoin de scrollViewDidEndDecelerating? pour gérer le défilement terminé, ou vous pouvez gérer le décalage dans scrollViewDidScroll pour comprendre à quel moment vous voulez changer quelque chose


3 Réponses :


1
votes

Vous devez utiliser la méthode de UIPageViewControllerDelegate "didFinishAnimating: previousViewControllers: transitionCompleted:" et utiliser le booléen transitionCompleted qui vous aide à mettre à jour votre page

OU

Reportez-vous à ce lien pour utiliser UIPageControl


3 commentaires

Hé euh, je n'ai pas trop travaillé avec le contrôle de page mais ici, ma classe n'est pas conforme à uipageviewcontroller J'utilise juste un contrôle de page comme celui-ci "let pageControl = UIPageControl ()"


Ok mon pote regarde la réponse modifiée et renvoie ce lien.


Hé, merci beaucoup mec, tout ce que j'avais à faire était de copier et coller lol.



2
votes

Le problème est simplement que vous définissez la page currentPage du contrôle de page dans la cellule willDisplay, à propos de laquelle la documentation dit:

Indique au délégué que la cellule spécifiée est sur le point d'être affichée dans la vue de collection.

Il s'agit d'une méthode qui s'appelle avant l'affichage de la cellule.

Vous devez utiliser scrollViewDidEndDecelerating (_ scrollView: UIScrollView) à vos fins.


1 commentaires

Veuillez envisager d'accepter ma réponse si elle a résolu votre problème. Merci.



0
votes

Grâce à @Dhaval Raval, j'ai trouvé la réponse dans le lien qu'il m'avait fourni, la voici:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let pageIndex = round(scrollView.contentOffset.x/view.frame.width)
    pageControl.currentPage = Int(pageIndex)
}


0 commentaires