(iphone)强制scrollViewDidEndDecelerating在以编程方式滚动视图后调用?

时间:2011-06-05 07:51:30

标签: iphone animation uiscrollview

我使用scrollRectToVisible:animated:

为滚动设置动画

但是scrollViewDidEndDecelerating没有被调用。

有没有办法强制调用函数?

5 个答案:

答案 0 :(得分:50)

不会为scrollViewDidEndDeceleratingscrollRectToVisible调用{p> setContentOffset(即以编程方式滚动)。如果你在头文件中注意到这个方法的声明,它就会明确地提到它是“在我们移动的时候用手指调用”。

现在,为了解决您的问题,我们会调用scrollViewDidEndScrollingAnimation代表(适用于setContentOffsetscrollRectToVisible),您可以使用。

答案 1 :(得分:5)

正如您所发现的那样,并不总是调用scrollViewDidEndDecelerating(如果您用手指移动滚动视图并使其停止,则也不会调用它。)

由于scrollViewDidEndDecelerating是委托方法,您可以强制它像这样调用:

[[scrollView delegate] scrollViewDidEndDecelerating:scrollView];

答案 2 :(得分:4)

我通过从 scrollViewDidEndScrollingAnimation

调用 scrollViewDidEndDecelerating 解决了这个问题
-(void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
    [self scrollViewDidEndDecelerating:scrollView];
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    //your code
}

答案 3 :(得分:1)

在我的案例中添加以下代码修复了一个问题。

\s*

答案 4 :(得分:0)

  1. 使用scrollView.delegate

  2. 对于非常平滑的视图动画,应添加一个委托函数。

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate, decelerate: Bool)  { 
    if decelerate == false {
        scrollViewDidEndDecelerating(scrollView)
    }
}