Zaten burada bazı iyi cevaplar var. Bununla birlikte, içeriğin bir sayfaya tam olarak sığmadığı senaryolar için - ve benim gibi sonucu a için kullanmak istiyorsanız UIPageControl
, o zaman ceil
işlevi kullanmak çok önemlidir .
"Dört ve biraz" içerik sayfamın olduğu bir örneği ele alalım.
Bunu şu anki gerçek hayat örneğime dayandıracağım. İçerik boyutu genişliği 3140 puntodur. Koleksiyon görünümümün çerçeve boyutuna göre sayfa genişliği 728.
Yani sayfa sayısı şuna eşittir:
3140 / 728 = 4.313
Benim numberOfPages
beş olacağım. Bunların dördü bir bütün olarak gösterilecek ve sonuncusu - sayfa beş - kalan 0.313
içeriğin gösterecektir .
Şimdi, numberOfPages
beş olmak, sayfa indekslerinin 0, 1, 2, 3 ve 4 olacağı anlamına gelir.
Sağa kaydırdığımda, son ofsete doğru sayfalandırdığımda, scrollViewDidEndDecelerating
yöntem 2412'lik bir son X uzaklığı veriyor.
Yuvarlama hesaplamasının uygulanması:
2412 / 728 = 3.313 then rounded = 3
Bu yanlış. Göreli konumla görüntüleyen sayfa şu şekilde olmalıdır:
Offset / Page User Is Viewing
0 0
728 1
1456 2
2184 3
2412 4
Aşağıdakileri kullanarak doğru hesaplama 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
Kullanıcı ekranı kaydırdığında geçerli sayfayı almak için kullanmayı unutmayın !