Swift 3-Version von Abey M und D6mi ‚s Antworten:
Wenn Spirale durch den Benutzer verursacht
Aktion
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")
}
Wenn blättern durch Code Aktion verursacht wird (programmatisch): (wie "scrollRectToVisible" oder „scrollt oItemAtIndexPath ")
public func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
//caused by code
print("SCROLL scrollViewDidEndScrollingAnimation")
}
Hinweise:
- Setzen Sie diese Funktionen in Ihrem UIScrollViewDelegate oder UICollectionViewDelegate delegieren.
- , wenn Sie nicht über einen separaten Delegierten haben, machen Sie Ihre aktuelle Klasse eine UIScrollViewDelegate op Spitze Ihrer Klassendatei
verlängern.
open class MyClass: NSObject , UICollectionViewDelegate
und irgendwo in Ihrem viewWillAppear die Klasse
override open func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// ...
self.myScrollView.delegate = self
// ...
}
Brilliant einen eigenen Delegierten machen. Du weißt nicht, wie viel böser Code mich gerettet hat. Ich habe versucht, es mithilfe des Callbacks shallInvalidateLayoutForBoundsChange in meinem UICollectionViewFlowLayout zu überwachen. Was für ein n00b. –
Bitte beachten Sie D6mi Hinweis unten über scrollViewDidEndScrollingAnimation. scrollViewDidEndDecelerating wird nicht für das programmatische Scrollen aufgerufen. – RajV
In der Tat, ich verstehe nicht, warum die aktuelle Antwort ist die akzeptierte, es funktioniert nicht 'scrollViewDidEndDecelerating' wird nicht aufgerufen, aber wie D6mi sagte, 'scrollViewDidEndScrollingAnimation' heißt – AkademiksQc