Il y a déjà de bonnes réponses ici. Cependant, pour les scénarios où le contenu ne rentre pas exactement dans une page - et si comme moi vous voulez utiliser le résultat pour a UIPageControl
, alors il est essentiel d'utiliser la ceil
fonction.
Prenons un exemple où j'ai "quatre et un peu" pages de contenu.
Je vais baser cela sur mon exemple actuel de la vie réelle. La largeur de la taille du contenu est de 3140 points. En fonction de la taille du cadre de vue de ma collection, la largeur de la page est de 728.
Donc, le nombre de pages est égal à:
3140 / 728 = 4.313
Mon numberOfPages
va avoir cinq ans. Quatre d'entre eux seront affichés dans leur intégralité, et le dernier - la page cinq - montrera le reste 0.313
du contenu.
Maintenant, numberOfPages
être cinq signifie que les index de page seront 0, 1, 2, 3 et 4.
Lorsque je glisse vers la droite, en recherchant le décalage final, la scrollViewDidEndDecelerating
méthode donne un décalage X final de 2412.
Application du calcul d'arrondi:
2412 / 728 = 3.313 then rounded = 3
C'est incorrect. La page que l'utilisateur consulte par décalage doit être:
Offset / Page User Is Viewing
0 0
728 1
1456 2
2184 3
2412 4
Le calcul correct en utilisant ceil
:
private func pageForOffset(offset:CGFloat, pageWidth width:CGFloat) -> Int
{
let page = Int(ceil(offset / width))
NSLog("\(__FUNCTION__) offset \(offset) width \(width) page \(page) ")
return page
}
UIScrollViewDelegate
pour obtenir la page actuelle lorsque l'utilisateur fait défiler!