Já existem boas respostas aqui. No entanto, para cenários onde o conteúdo não se encaixa exatamente em uma página - e se, como eu, você deseja usar o resultado para um UIPageControl
, então é essencial usar oceil
função.
Vejamos um exemplo em que tenho "quatro e um pouco" páginas de conteúdo.
Vou basear isso no meu exemplo atual da vida real. A largura do tamanho do conteúdo é 3140 pontos. Com base no tamanho do quadro da visualização da minha coleção, a largura da página é 728.
Portanto, o número de páginas é igual a:
3140 / 728 = 4.313
Meu numberOfPages
vai fazer cinco anos. Quatro dos quais serão exibidos na íntegra, e o último dos quais - página cinco - irá mostrar o restante0.313
do conteúdo.
Agora, numberOfPages
ser cinco significa que os índices da página serão 0, 1, 2, 3 e 4.
Quando eu deslizo para a direita, indo em direção ao deslocamento final, o scrollViewDidEndDecelerating
método fornece um deslocamento X final de 2412.
Aplicando o cálculo de arredondamento:
2412 / 728 = 3.313 then rounded = 3
Isso está incorreto. A página que o usuário está visualizando por deslocamento deve ser:
Offset / Page User Is Viewing
0 0
728 1
1456 2
2184 3
2412 4
O cálculo correto 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 obter a página atual quando o usuário rolar!