Aquí ya hay algunas buenas respuestas. Sin embargo, para escenarios donde el contenido no encaja exactamente en una página, y si, como yo, desea usar el resultado para un UIPageControl
, entonces es esencial usar elceil
función.
Tomemos un ejemplo en el que tengo "cuatro y un poco" páginas de contenido.
Basaré esto en mi ejemplo actual de la vida real. El ancho del tamaño del contenido es 3140 puntos. Según el tamaño del marco de vista de mi colección, el ancho de la página es 728.
Entonces el número de páginas es igual a:
3140 / 728 = 4.313
Mi numberOfPages
va a ser cinco. Cuatro de los cuales se mostrarán en su totalidad, y el último de los cuales, la página cinco, mostrará el 0.313
contenido restante .
Ahora, numberOfPages
ser cinco significa que los índices de página serán 0, 1, 2, 3 y 4.
Cuando deslizo el dedo hacia la derecha, paginando hacia el desplazamiento final, el scrollViewDidEndDecelerating
método da un desplazamiento X final de 2412.
Aplicando el cálculo de redondeo:
2412 / 728 = 3.313 then rounded = 3
Eso es incorrecto. La página que el usuario está viendo por desplazamiento debe ser:
Offset / Page User Is Viewing
0 0
728 1
1456 2
2184 3
2412 4
El cálculo correcto usando 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
para obtener la página actual cuando el usuario se desplaza!