UIScrollView scrollRectToVisible:animated:有一种方法可以在动画结束时调用方法

时间:2012-02-04 10:52:24

标签: ios uiscrollview uiscrollviewdelegate

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

5 个答案:

答案 0 :(得分:21)

答案 1 :(得分:12)

我是这样做的,因为有时使用委托对我来说不实用,就像我在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
}];

答案 2 :(得分:4)

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

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

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

答案 3 :(得分: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()中做您需要的事情。

一个很好的例子是处理页面滚动的噩梦。知道自己在哪个页面上非常非常不敢。

答案 4 :(得分:-1)

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