11

有没有办法知道动画何时结束并且 uiscrollview 已经停止。

4

5 回答 5

22

是的,使用scrollViewDidEndScrollingAnimation

于 2012-08-29T11:30:43.030 回答
13

我这样做是因为有时使用委托对我来说并不实用,就像我在 UIViewController 转换中这样做:

[UIView animateWithDuration:0.3 animations:^{
    [scrollView setContentOffset:CGPointMake(0, -scrollView.contentInset.top) animated:NO];
} completion:^(BOOL finished) {
    // This is called when it's complete
}];
于 2015-10-22T12:16:55.907 回答
4

通过以下方式为您的 UIScrollView实现UIScrollViewDelegate委托方法:

scrollViewDidEndScrollingAnimation:当您通过调用setContentOffset:animated:或 方法(使用scrollRectToVisible:animated:动画:YES)启动滚动时,用于检测滚动动画何时结束。

如果要监视由触摸手势启动的滚动视图运动,请使用scrollViewDidEndDecelerating:方法,该方法在滚动运动停止时调用。

于 2013-03-19T09:13:01.577 回答
2

您需要涵盖三个 (!) 案例。谢谢,苹果。

// 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()
}

(注意不要忘记中间额外的“if”子句。)

然后在 中fingerOrProgrammaticMoveDone(),做你需要的。

一个很好的例子就是处理分页滚动的噩梦。很难知道你在哪个页面上。

于 2020-01-31T15:03:05.467 回答
-2

scrollViewDidEndDecelerating:当 scrollView 完全停止时调用 UIScrollView 委托方法。

于 2012-02-04T11:00:34.737 回答