允许UIScrollView在不弹跳的情况下滚动过去的内容

时间:2014-06-24 19:01:43

标签: ios uiscrollview uicollectionview overscroll

概述

我正在构建应用,允许用户将主UICollectionView过度滚动一定数量,以便加载相关内容。过度滚动的触觉体验应该与许多其他iOS应用程序相同,这些应用程序会导致当前页面上的内容刷新,因此我设置了collectionView.bounce = YES

一旦用户超过指定金额,我想将当前UICollectionView向下移动到视野之外,同时将新页面从设备顶部向下移动到视图中,非常类似于inter - Digg iPhone应用程序中的粒子导航。

我使用此UIScrollViewDelegate方法检测过度滚动:

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    CGFloat offsetY = scrollView.contentOffset.y;
    CGFloat contentHeight = scrollView.contentSize.height;

    if (offsetY < -40){
        [self.delegate overscrolledUp];
    }

    if (offsetY - (contentHeight - scrollView.frame.size.height) > 40){
        [self.delegate overscrolledDown];
    }
}

问题

委托负责移动这些UICollectionView的帧,但我的问题是,当前页面向下移动并离开视图(如果用户向下滚动,则向上和向外移动), UICollectionView也会将滚动条反弹回{0}的contentOffset。这导致我想要避免的奇怪的动画。我希望用户能够过度滚动,以便显示描述他们可以看到的新内容的指示符,但我不希望在页面更改动画期间反转过度滚动。

问题

在用户滚动浏览内容后,有没有办法阻止UICollectionView / UIScrollView将其滚动条返回到(0,0)?

1 个答案:

答案 0 :(得分:2)

看看

https://github.com/enormego/EGOTableViewPullRefresh

它包含一个刷新表格视图代码,您可以直接使用它或作为灵感来源。