Hier gibt es bereits einige gute Antworten. Für Szenarien, in denen der Inhalt nicht genau in eine Seite passt - und wenn Sie wie ich das Ergebnis für a verwenden möchten UIPageControl
, ist es wichtig, das zu verwendenceil
Funktion zu verwenden.
Nehmen wir ein Beispiel, in dem ich "vier und ein bisschen" Inhaltsseiten habe.
Ich werde dies auf mein aktuelles Beispiel aus dem wirklichen Leben stützen. Die Breite der Inhaltsgröße beträgt 3140 Punkte. Basierend auf der Rahmengröße meiner Sammlungsansicht beträgt die Seitenbreite 728.
Die Anzahl der Seiten entspricht also:
3140 / 728 = 4.313
Mein numberOfPages
wird fünf sein. Vier davon werden vollständig angezeigt, und der letzte - Seite fünf - zeigt den verbleibenden Wert0.313
Inhalt.
Jetzt, numberOfPages
fünf Mittel ist , dass die Seite Indizes 0, 1, 2, 3 und 4 sein.
Wenn ich nach rechts wische und in Richtung des endgültigen Versatzes blättere, wird der scrollViewDidEndDecelerating
ergibt Methode einen endgültigen X-Versatz von 2412.
Anwenden der Rundungsberechnung:
2412 / 728 = 3.313 then rounded = 3
Das ist falsch Der Seitenbenutzer, der nach Versatz angezeigt wird, sollte sein:
Offset / Page User Is Viewing
0 0
728 1
1456 2
2184 3
2412 4
Die korrekte Berechnung mit 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
, um die aktuelle Seite zu erhalten, wenn der Benutzer einen Bildlauf durchführt!