In alcune versioni precedenti di iOS (come iOS 9, 10), scrollViewDidEndDecelerating
non verrà attivato se scrollView si interrompe improvvisamente toccando.
Ma nella versione corrente (iOS 13), scrollViewDidEndDecelerating
verrà sicuramente attivato (per quanto ne so).
Quindi, se la tua app ha preso di mira anche le versioni precedenti, potresti aver bisogno di una soluzione alternativa come quella menzionata da Ashley Smart, oppure puoi utilizzare la seguente.
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
}
Spiegazione
UIScrollView verrà arrestato in tre modi:
- scorrimento rapido e arresto da solo
- scorrimento rapido e arresto mediante tocco delle dita (come il freno di emergenza)
- scorrimento lento e arresto
Il primo può essere rilevato da scrollViewDidEndDecelerating
e altri metodi simili mentre gli altri due non possono.
Fortunatamente, UIScrollView
ha tre stati che possiamo usare per identificarli, che viene utilizzato nelle due righe commentate da "// 1" e "// 2".