Здесь уже есть несколько хороших ответов. Однако для сценариев, когда контент не помещается точно на страницу - и если вы, как и я, хотите использовать результат для a UIPageControl
, то важно использоватьceil
функцию.
Возьмем пример, когда у меня есть «четыре с небольшим» страницы контента.
Я буду основывать это на моем текущем примере из реальной жизни. Ширина размера контента 3140 точек. Исходя из размера рамки представления моей коллекции, ширина страницы составляет 728.
Итак, количество страниц равно:
3140 / 728 = 4.313
Моему numberOfPages
будет пять. Четыре из них будут отображаться полностью, а последняя из них - пятая страница - покажет оставшийся 0.313
контент.
Теперь numberOfPages
пять означает, что индексы страниц будут 0, 1, 2, 3 и 4.
Когда я смахиваю вправо, перемещаясь к окончательному смещению, scrollViewDidEndDecelerating
метод дает окончательное смещение по оси X, равное 2412.
Применяя расчет округления:
2412 / 728 = 3.313 then rounded = 3
Это неверно. Страница, которую просматривает пользователь по смещению, должна быть:
Offset / Page User Is Viewing
0 0
728 1
1456 2
2184 3
2412 4
Правильный расчет с использованием 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
для получения текущей страницы при прокрутке пользователя!