Bei einigen früheren iOS-Versionen (wie iOS 9, 10) scrollViewDidEndDecelerating
wird dies nicht ausgelöst, wenn die scrollView plötzlich durch Berühren gestoppt wird.
Aber in der aktuellen Version (iOS 13) scrollViewDidEndDecelerating
wird sicher ausgelöst (soweit ich weiß).
Wenn Ihre App auch auf frühere Versionen abzielt, benötigen Sie möglicherweise eine Problemumgehung wie die von Ashley Smart erwähnte oder die folgende.
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
}
Erläuterung
UIScrollView wird auf drei Arten
gestoppt : - schnell gescrollt und von selbst gestoppt
- schnell gescrollt und per Fingerberührung gestoppt (wie Notbremse)
- langsam gescrollt und gestoppt
Die erste kann mit scrollViewDidEndDecelerating
ähnlichen Methoden erkannt werden, die anderen beiden nicht.
Glücklicherweise UIScrollView
haben wir drei Status, mit denen wir sie identifizieren können. Dies wird in den beiden Zeilen verwendet, die mit "// 1" und "// 2" kommentiert sind.