Jest tu już kilka dobrych odpowiedzi. Jednak w scenariuszach, w których treść nie pasuje dokładnie do strony - i jeśli tak jak ja chcesz użyć wyniku dla a UIPageControl
, to konieczne jest użycie ceil
funkcji.
Weźmy przykład, w którym mam „cztery i trochę” strony treści.
Oprę to na moim obecnym przykładzie z życia. Szerokość rozmiaru treści to 3140 punktów. Na podstawie rozmiaru ramki widoku mojej kolekcji szerokość strony to 728.
Tak więc liczba stron jest równa:
3140 / 728 = 4.313
Mój numberOfPages
będzie miał pięć lat. Cztery z nich wyświetlą się w całości, a ostatnia - strona piąta - pokaże pozostałą 0.313
treść.
Teraz, numberOfPages
gdy jest pięć, oznacza, że indeksy stron będą wynosić 0, 1, 2, 3 i 4.
Kiedy przesuwam palcem w prawo, przewijając w kierunku końcowego przesunięcia, scrollViewDidEndDecelerating
metoda daje końcowe przesunięcie X o wartości 2412.
Stosowanie obliczenia zaokrąglenia:
2412 / 728 = 3.313 then rounded = 3
To jest niepoprawne. Strona przeglądana przez użytkownika według przesunięcia powinna być:
Offset / Page User Is Viewing
0 0
728 1
1456 2
2184 3
2412 4
Prawidłowe obliczenia przy użyciu 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
aby uzyskać bieżącą stronę, gdy użytkownik przewija!