Gibt es eine Möglichkeit zu wissen, wann die Animation beendet ist und uiscrollview zum Stillstand gekommen ist.
Antworten
Zu viele Anzeigen?Ja, verwenden scrollViewDidEndScrollingAnimation
Ich tue es so, weil manchmal mit dem Delegaten ist nicht praktisch für mich, wie wenn ich es in UIViewController Übergang tun:
[UIView animateWithDuration:0.3 animations:^{
[scrollView setContentOffset:CGPointMake(0, -scrollView.contentInset.top) animated:NO];
} completion:^(BOOL finished) {
// This is called when it's complete
}];
Umsetzung UIScrollViewDelegate delegieren Sie die Methoden für Ihre UIScrollView auf folgende Weise:
Utilice scrollViewDidEndScrollingAnimation:
um zu erkennen, wann die Bildlaufanimation beendet ist, wenn Sie den Bildlauf durch den Aufruf setContentOffset:animated:
oder scrollRectToVisible:animated:
Methoden (mit animated:YES).
Wenn Sie die Bewegung der Bildlaufansicht überwachen möchten, die durch Berührungsgesten ausgelöst wurde, verwenden Sie scrollViewDidEndDecelerating:
Methode, die aufgerufen wird, wenn der Bildlauf zum Stillstand kommt.
Sie müssen DREI (!) Fälle abdecken. Danke, Apple.
// do note that you need all three of the following
public func scrollViewDidEndScrollingAnimation(_ s: UIScrollView) {
// covers case setContentOffset/scrollRectToVisible
fingerOrProgrammaticMoveDone()
}
public func scrollViewDidEndDragging(_ s: UIScrollView, willDecelerate d: Bool) {
if decelerate == false {
// covers certain cases of user finger
fingerOrProgrammaticMoveDone()
}
}
public func scrollViewDidEndDecelerating(_ s: UIScrollView) {
// covers certain cases of user finger
fingerOrProgrammaticMoveDone()
}
(Achten Sie darauf, die zusätzliche "if"-Klausel in der Mitte nicht zu vergessen.)
Dann in fingerOrProgrammaticMoveDone()
tun, was Sie brauchen.
Ein gutes Beispiel dafür ist der Alptraum der Handhabung des seitenweisen Scrollens. Es ist sehr, sehr schwierig, zu wissen, auf welcher Seite man sich befindet.