Swift 3 versione di risposte Abey M e s' D6mi:
Quando scorrimento è causato dall'utente azione
public func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if (!decelerate) {
//cause by user
print("SCROLL scrollViewDidEndDragging")
}
}
public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
//caused by user
print("SCROLL scrollViewDidEndDecelerating")
}
Quando scorrimento è causato da un'azione di codice (di programmazione): (come "scrollRectToVisible" o "scrollT oItemAtIndexPath ")
public func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
//caused by code
print("SCROLL scrollViewDidEndScrollingAnimation")
}
Note:
- mettere queste funzioni nel UIScrollViewDelegate o UICollectionViewDelegate delegato.
- se non si dispone di un delegato indipendente, rendere la vostra classe corrente estendere un op superiore UIScrollViewDelegate del file di classe
.
open class MyClass: NSObject , UICollectionViewDelegate
e da qualche parte nel vostro viewWillAppear rendere la classe proprio delegato
override open func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// ...
self.myScrollView.delegate = self
// ...
}
brillante. Non sai quanto codice sgradevole mi abbia salvato. Stavo cercando di monitorarlo utilizzando il callback shouldInvalidateLayoutForBoundsChange nel mio UICollectionViewFlowLayout. Che n00b. –
Vedere la nota di D6mi di seguito su scrollViewDidEndScrollingAnimation. scrollViewDidEndDecelerating non viene chiamato per lo scorrimento programmatico. – RajV
In effetti, non capisco perché la risposta corrente sia accettata, non funziona 'scrollViewDidEndDecelerating' non viene chiamato ma come D6mi ha detto,' scrollViewDidEndScrollingAnimation' è chiamato – AkademiksQc