如何检测Scrollview反弹 - iOS

时间:2013-12-27 17:39:46

标签: ios uiscrollview delegates

我想在UIScrollview上实现“pull down to refresh”类型效果。在检测到滚动视图的“顶部”反弹时,视图应刷新一些组件。 如何检测UIScrollview的“顶部反弹”?我尝试了委托“scrollViewWillBeginDragging”,但没有用。

2 个答案:

答案 0 :(得分:15)

实现scrollViewDidScroll:,并检查scrollView.contentOffset.y的值 - 当你向下拉时它将是负数,并在它反弹时返回0(或接近0)。根据您要满足的条件进行刷新,您可以在该值达到特定负值时设置一个标志,然后在它返回到接近0时进行刷新。这样的事情:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView.contentOffset.y < -50) _metNegativePullDown = YES;

    if (fabs(scrollView.contentOffset.y) < 1 && _metNegativePullDown) {
        //do your refresh here
        _metNegativePullDown = NO;
    }
}

答案 1 :(得分:0)

为了记录,我正在使用以下类别在Swift 4上检测到两个弹跳:

extension UIScrollView {
    var isBouncing: Bool {
        var isBouncing = false
        if contentOffset.y >= (contentSize.height - bounds.size.height) {
            // Bottom bounce
            isBouncing = true
        } else if contentOffset.y < contentInset.top {
            // Top bounce
            isBouncing = true
        }
        return isBouncing
    }
}

需要考虑的事情

  • 在这种情况下,我只是检查顶部内容插入,如果要使用底部插入,则必须进行一些调整
  • 如果滚动视图是viewcontroller视图的直接子级,并且具有对超级视图的最高约束而不是最高安全区域裕度,那么这将不是完美的技巧,需要进行更多调整