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 ceiliş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 numberOfPagesbeş olacağım. Bunların dördü bir bütün olarak gösterilecek ve sonuncusu - sayfa beş - kalan 0.313içeriğin gösterecektir .
Şimdi, numberOfPagesbeş 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, scrollViewDidEndDeceleratingyö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
}
UIScrollViewDelegateKullanıcı ekranı kaydırdığında geçerli sayfayı almak için kullanmayı unutmayın !