Pada beberapa versi iOS sebelumnya (seperti iOS 9, 10), scrollViewDidEndDecelerating
tidak akan dipicu jika scrollView tiba-tiba dihentikan dengan menyentuh.
Tetapi dalam versi saat ini (iOS 13), scrollViewDidEndDecelerating
akan dipicu pasti (Sejauh yang saya tahu).
Jadi, jika Aplikasi Anda menargetkan versi sebelumnya juga, Anda mungkin memerlukan solusi seperti yang disebutkan oleh Ashley Smart, atau Anda dapat yang berikutnya.
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if !scrollView.isTracking, !scrollView.isDragging, !scrollView.isDecelerating { // 1
scrollViewDidEndScrolling(scrollView)
}
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if !decelerate, scrollView.isTracking, !scrollView.isDragging, !scrollView.isDecelerating { // 2
scrollViewDidEndScrolling(scrollView)
}
}
func scrollViewDidEndScrolling(_ scrollView: UIScrollView) {
// Do something here
}
Penjelasan
UIScrollView akan dihentikan dengan tiga cara:
- digulir dengan cepat dan dihentikan dengan sendirinya
- digulir dan dihentikan dengan cepat dengan sentuhan jari (seperti rem Darurat)
- perlahan digulir dan dihentikan
Yang pertama dapat dideteksi oleh scrollViewDidEndDecelerating
dan metode serupa lainnya sementara dua lainnya tidak.
Untungnya, UIScrollView
memiliki tiga status yang dapat kita gunakan untuk mengidentifikasi mereka, yang digunakan dalam dua baris yang dikomentari oleh "// 1" dan "// 2".