Sudah ada beberapa jawaban bagus di sini. Namun, untuk skenario di mana konten tidak pas persis dengan halaman - dan jika seperti saya Anda ingin menggunakan hasilnya untuk UIPageControl
, maka penting untuk menggunakanceil
fungsi tersebut.
Mari kita ambil contoh di mana saya memiliki "empat dan sedikit" halaman konten.
Saya akan mendasarkan ini pada contoh kehidupan nyata saya saat ini. Lebar ukuran konten adalah 3140 poin. Berdasarkan ukuran bingkai tampilan koleksi saya, lebar halaman adalah 728.
Jadi jumlah halaman sama dengan:
3140 / 728 = 4.313
Saya numberOfPages
akan menjadi lima. Empat di antaranya akan ditampilkan secara keseluruhan, dan yang terakhir - halaman lima - akan menampilkan konten yang tersisa 0.313
.
Sekarang, numberOfPages
menjadi lima berarti indeks halaman akan menjadi 0, 1, 2, 3, dan 4.
Saat saya menggesek ke kanan, paging menuju offset akhir, file scrollViewDidEndDecelerating
metode ini memberikan offset X terakhir 2412.
Menerapkan perhitungan pembulatan:
2412 / 728 = 3.313 then rounded = 3
Itu salah. Pengguna halaman yang melihat dengan offset harus:
Offset / Page User Is Viewing
0 0
728 1
1456 2
2184 3
2412 4
Perhitungan yang benar menggunakan 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
untuk mendapatkan halaman saat ini ketika pengguna menggulir!