Там некоторые хорошие ответы уже здесь.Тем не менее, для сценариев, где контент не соответствует точно на странице, - и, как и я, вы хотите использовать результат для 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
}
Действительно, похоже, как оплошности со стороны компании Apple ... – elsurudo
Не забудьте использовать 'UIScrollViewDelegate', чтобы получить текущую страницу, когда пользователь прокручивает! –
Это может иметь проблемы при работе с вращением. –