我想知道scrollView是向上还是向下滚动。理想情况下,如果向上或向下滚动scrollView,我只想进行一次调用。我试过了,但显然没有告诉我任何方向:
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
NSLog(@"%.2f", scrollView.contentOffset.y);
}
contentOffset将始终为0 - 无论我是向上还是向下滚动都无关紧要。现在我可以简单地检查 - (void)scrollViewDidScroll:如果偏移量是正数或负数,但这是不断调用的。 scrollViewWillBeginDragging的优点是只调用一次,这就是我需要的。是否有类似scrollViewDidBeginDragging的东西?我没有在文档中找到任何内容。任何聪明的解决方法?
答案 0 :(得分: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;
}
答案 1 :(得分:4)
IS 可以在注册任何滚动之前在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
}
}
我发现当用户在禁止的方向拖动时,在第一次拖动移动时取消滚动非常有用。
答案 2 :(得分:2)
创建一个声明的属性,让我们知道tableview开始滚动。让我们使用名为scrollViewJustStartedScrolling
的BOOL。
在scrollViewWillBeginDragging
中将其设为true:
self.scrollViewJustStartedScrolling = YES;
在scrollViewDidScroll
中执行以下操作:
if (self.scrollViewJustStartedScrolling) {
// check contentOffset and do what you need to do.
self.scrollViewJustStartedScrolling = NO;
}
答案 3 :(得分:-1)
-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
if (velocity.y > 0){
NSLog(@"up");
} else {
NSLog(@"down");
}
}