一部の以前のiOSバージョン(iOS 9、10など)では、 scrollViewDidEndDecelerating
、scrollViewがタッチによって突然停止した場合はトリガーされません。
しかし、現在のバージョン(iOS 13)では、scrollViewDidEndDecelerating
確実にトリガーされます(私の知る限り)。
したがって、アプリが以前のバージョンもターゲットにしている場合は、Ashley Smartによって言及されているような回避策が必要になるか、または次の回避策が可能です。
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は次の3つの方法
で停止します。- すばやくスクロールして単独で停止します
-指でタッチしてすばやくスクロールして停止します(緊急ブレーキのように)
-ゆっくりスクロールして停止します
最初の1つはscrollViewDidEndDecelerating
他の同様の方法で検出できますが、他の2つは検出できません。
幸い、UIScrollView
それらを識別するために使用できる3つのステータスがあり、「// 1」と「// 2」でコメント化された2行で使用されます。