Здесь уже есть несколько хороших ответов.Тем не менее, для сценариев, где контент не помещается точно на страницу - и если, как и я, вы хотите использовать результат для UIPageControl
, то важно использовать функцию ceil
.
Давайте возьмемпример, где у меня есть «четыре с небольшим» страницы контента.
Я буду основывать это на своем текущем примере из реальной жизни.Ширина содержимого составляет 3140 точек.Исходя из размера рамки представления моей коллекции, ширина страницы составляет 728.
Таким образом, количество страниц равно:
3140 / 728 = 4.313
My 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
}