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 ceilfonction.
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 numberOfPagesva avoir cinq ans. Quatre d'entre eux seront affichés dans leur intégralité, et le dernier - la page cinq - montrera le reste 0.313du 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 scrollViewDidEndDeceleratingmé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
}
UIScrollViewDelegatepour obtenir la page actuelle lorsque l'utilisateur fait défiler!