J'ai essayé de trouver cette question pendant un certain temps, mais je n'ai pas trouvé la réponse à ce problème. Mon problème est que j'ai un UICollectionView
et que la direction de défilement est Horizontal
avec Paging Enabled
. Mon problème est que je veux conserver le tack du numéro de page actuel sur lequel se trouve l'utilisateur, j'ai donc créé une variable int
et je veux maintenant l'ajouter ou la soustraire de 1 chaque fois que l'utilisateur glisse vers la droite ou la gauche . J'ai essayé d'utiliser le délégué de scrollView
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
mais lorsque l'utilisateur glisse vers la droite ou vers la gauche, il est appelé autant de fois que le nombre de colonnes sur une page dans le UICollectionView
plus il ne me fera pas savoir que si l'utilisateur est allé à la page suivante ou le précédent.
Utilisation :
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
CGFloat pageWidth = collectionView.frame.size.width;
float currentPage = collectionView.contentOffset.x / pageWidth;
if (0.0f != fmodf(currentPage, 1.0f))
{
pageControl.currentPage = currentPage + 1;
}
else
{
pageControl.currentPage = currentPage;
}
NSLog(@"Page Number : %ld", (long)pageControl.currentPage);
}
Et si vous n'utilisez aucun pageControl, alors ceil(currentPage)
sera votre numéro de page actuel.
Swift 3 Xcode 8.2
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let x = scrollView.contentOffset.x
let w = scrollView.bounds.size.width
let currentPage = Int(ceil(x/w))
// Do whatever with currentPage.
}
Sur la base de la réponse de @Shankar BS, je l'ai implémenté comme ceci dans Swit. Gardez à l'esprit que CollectionViewDelegate est conforme à ScrollViewDelegate:
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let pageWidth = scrollView.frame.size.width
let page = Int(floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1)
print("page = \(page)")
}
Vous pouvez obtenir la page actuelle comme ci-dessous, l'index sera de 0
à (total page - 1)
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
CGFloat pageWidth = scrollView.frame.size.width;
int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
NSLog(@"Current page -> %d",page);
}
Swift 2.2
func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
let x = collectionView.contentOffset.x
let w = collectionView.bounds.size.width
let currentPage = Int(ceil(x/w))
print("Current Page: \(currentPage)")
}