У деяких попередніх версіях iOS (наприклад, iOS 9, 10), scrollViewDidEndDecelerating
не буде спрацьовувати, якщо дотик scrollView раптово зупиниться натисканням.
Але в поточній версії (iOS 13) scrollViewDidEndDecelerating
буде спрацьовувати точно (наскільки я знаю).
Отже, якщо ваша програма також орієнтована на більш ранні версії, можливо, вам знадобиться рішення, як те, яке згадував Ешлі Смарт, або ви можете наступне.
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
}
Пояснення
UIScrollView зупиняється трьома способами:
- швидко прокручується і зупиняється сам по собі
- швидко прокручується і зупиняється натисканням пальцем (наприклад, екстрене гальмо)
- повільно прокручується та зупиняється
Перший можна виявити за допомогою scrollViewDidEndDecelerating
інших подібних методів, а інші два - не.
На щастя, UIScrollView
є три статуси, які ми можемо використовувати для їх ідентифікації, який використовується у двох рядках, коментованих "// 1" та "// 2".