Тут вже є кілька хороших відповідей. Однак для сценаріїв, коли вміст не вписується точно в сторінку - і якщо, як я, ви хочете використовувати результат для 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
щоб отримати поточну сторінку, коли користувач прокручує!