scrollViewDidScroll未调用 - 调用scrollViewDidEndDecelerating

时间:2014-11-18 02:02:35

标签: cocoa-touch uiscrollview uiscrollviewdelegate

我有一个自定义视图替换键盘,我试图让它在用户向下滚动时滚动屏幕。

我原来的scrollViewDelegate方法工作除了用户滚动和视图动画之间存在延迟,因为我使用scrollViewDidEndDecelerating并且在用户开始滚动后调用它需要大约1秒钟。

  - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    self.isUserScrolling = YES;

    // Save to tell if scrolling up or down
    initialContentOffset = scrollView.contentOffset.y;
    previousContentDelta = 0.f;
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    self.isUserScrolling = NO;

}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

    self.isUserScrolling = NO;

    // If scrolled down
    CGFloat prevDelta = previousContentDelta;
    CGFloat delta = scrollView.contentOffset.y - initialContentOffset;
    if (delta > 0.f && prevDelta <= 0.f) {

    } else if (delta < 0.f && prevDelta >= 0.f) {
        [self animateKeyBoardSpace:[self rectForKeyboardSpace:NO] curve:UIViewAnimationCurveEaseInOut duration:0.25];
    }
    previousContentDelta = delta;

}

所以我现在尝试检查scrollViewDidScroll中的向下滚动并在那里调用animateKeyBoardSpace

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    //    ScrollDirection scrollDirection;
    if (lastContentOffset > scrollView.contentOffset.y) {
        [self animateKeyBoardSpace:[self rectForKeyboardSpace:NO] curve:UIViewAnimationCurveEaseInOut duration:0.25];
    }
    else if (lastContentOffset < scrollView.contentOffset.y) {

    }

    lastContentOffset = scrollView.contentOffset.x;
}

然而,scrollViewDidScroll甚至没有被召唤。它在同一个tableViewController中,设置了委托,并且调用了其他委托方法。

1 个答案:

答案 0 :(得分:1)

我在超类中工作,从前一段时间我在子类中有scrollViewDidScroll的存根。这是捕获委托电话。

我只需要删除子类存根。