4

我在 UIScrollViewDelegate 中实现了 scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate。该方法被调用没有问题,除非我滚动得非常快。例如,如果我快速滑动三次,即使滚动视图将(正确地)翻页三次,该方法也只会被调用一次。

有什么解决办法吗?我依靠这种方法来进行适当的延迟加载行为,当它没有被调用时,这意味着事情不会及时加载。如果这种方法没有解决方案,是否有另一种方法可以让我知道每次用户从滚动视图中抬起手指时?

4

1 回答 1

2

哇,多么古老的问题,但无论如何这里是答案。

scrollView.delegate = self; // or some .m file

然后在执行中

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    NSLog(@"Just a usual drag!");
}

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
    // so when dragged quickly, this function will be called instead of didEndDragging
    // now lets trick it to stop the animation of decelerating
    [scrollView setContentOffset:[scrollView contentOffset] animated:NO];
    // and then call the dragging event like nothing even happened
    [scrollView.delegate scrollViewDidEndDragging:scrollView willDecelerate:NO];
}
于 2015-08-14T15:45:24.240 回答