In alcune versioni precedenti di iOS (come iOS 9, 10), scrollViewDidEndDeceleratingnon verrà attivato se scrollView si interrompe improvvisamente toccando.
Ma nella versione corrente (iOS 13), scrollViewDidEndDeceleratingverrà 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 scrollViewDidEndDeceleratinge altri metodi simili mentre gli altri due non possono.
Fortunatamente, UIScrollViewha tre stati che possiamo usare per identificarli, che viene utilizzato nelle due righe commentate da "// 1" e "// 2".