4

我想知道 scrollView 是向上还是向下滚动。理想情况下,如果向上或向下滚动滚动视图,我只想打一个电话。我试过了,但它显然不会告诉我有关方向的任何信息:

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    NSLog(@"%.2f", scrollView.contentOffset.y);
}

contentOffset 将始终为 0 - 我向上或向下滚动都没有关系。现在我可以简单地检查 -(void)scrollViewDidScroll: 如果偏移量是正数还是负数,但这会不断调用。scrollViewWillBeginDragging 的优点是只被调用一次,这就是我所需要的。有类似 scrollViewDidBeginDragging 的东西吗?我在文档中没有找到任何东西。任何聪明的解决方法?

4

4 回答 4

12

将初始内容偏移量存储在scrollViewWillBeginDragging:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    self.initialContentOffset = scrollView.contentOffset.y;
    self.previousContentDelta = 0.f;
}

并检查每个scrollViewDidScroll:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat prevDelta = self.previousContentDelta;
    CGFloat delta = scrollView.contentOffset.y - self.initialContentOffset;
    if (delta > 0.f && prevDelta <= 0.f) {
        // started scrolling positively
    } else if (delta < 0.f && prevDelta >= 0.f) {
        // started scrolling negatively
    }
    self.previousContentDelta = delta;
}
于 2012-04-06T18:01:20.773 回答
4

可以在注册任何滚动之前执行此签入。scrollViewWillBeginDragging(IOS 5+)。通过检查滚动视图的内置平移手势识别器,您可以检查手势方向。

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{ 
    CGPoint translation = [scrollView.panGestureRecognizer translationInView:scrollView.superview];

    if(translation.y > 0)
    {
        // react to dragging down
    } else
    {
        // react to dragging up
    }
}

我发现当用户向禁止方向拖动时,在第一次拖动时取消滚动非常有用。

于 2013-10-16T19:48:32.147 回答
2

创建一个声明的属性,让我们知道 tableview 开始滚动。让我们使用一个名为scrollViewJustStartedScrolling.

将其设置为scrollViewWillBeginDraggingtrue:

self.scrollViewJustStartedScrolling = YES;

scrollViewDidScroll做类似的事情:

if (self.scrollViewJustStartedScrolling) {
    // check contentOffset and do what you need to do.
    self.scrollViewJustStartedScrolling = NO;
}
于 2012-04-06T17:48:14.297 回答
-1
-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{

    if (velocity.y > 0){
        NSLog(@"up");
    } else {
        NSLog(@"down");
    }
}
于 2014-01-21T16:20:31.910 回答