2

I want to perform some action when scrollview finish scrolling, so I wrote that acton in scrollViewDidEndScrollingAnimation delegate method. It is working fine when rect is not visible and scrollview scrolls to new rect. But when rect is already visible scrollViewDidEndScrollingAnimation method will not be called and so the method written inside scrollViewDidEndScrollingAnimation will not get called. But I want to call that action, can anyone knows how to call that method when scrollview finish scrolling?

Thanks in advance!

4

2 回答 2

5

我认为这个抓住了几个人。实际发生的情况是,scrollViewDidEndScrollingAnimation仅当您显式调用 thesetContentOffset:animated:scrollRectToVisible:animated:方法时才会调用它。

正如UIScrollViewDelegate 协议参考所述:

讨论
滚动视图在 setContentOffset:animated: 和 scrollRectToVisible:animated: 方法的实现结束时调用此方法,但仅在请求动画时才调用。

那么该怎么办?好吧,我们不要忘记滚动视图中内容数据的偏移通常不是动画的。相反,它是不断更新contentOffset值的结果。因此,您可能会根据contentOffset使用scrollViewDidScroll:委托方法的特定来触发您的方法。

或者,如果在每个滚动手势之后都要做一些事情 - 特别是在私人之后UIScrollViewPanGestureRecognizer- 那么你可以这样做scrollViewDidEndDecelerating:

讨论当滚动停止时,
滚动视图调用这个方法。UIScrollView 的 decelerating 属性控制减速。

于 2013-05-06T17:10:06.190 回答
2

同时实施scrollViewDidEndDecelerating:scrollViewDidEndDragging:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    // User lifted finger while scrolling
    [self doPostScrollAction];
}

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    if(!decelerate)
    {
        // User lifted finger after stopping scrolling
        [self doPostScrollAction];
    }
}
于 2016-11-21T14:45:49.990 回答