在默认的UIScrollView平移手势识别器中检测UIGestureStateEnded

3

我的代码:

[self.scrollView.panGestureRecognizer addTarget:self action:@selector(handlePanForScrollView:)];

- (void)handlePanForScrollView:(UIPanGestureRecognizer *)gesture {
switch (gesture.state) {
    case UIGestureRecognizerStateBegan:
        startScrollPoint = [gesture locationInView:self.scrollView];
        break;
    case UIGestureRecognizerStateEnded: {
        NSLog(@"end");
    }
    default:
        ;
        break;
    }
}

开始状态正常。但是我的NSLog在滚动时始终显示我的end(因为状态已更改)。如何正确地检测手势识别器的结束状态?

2个回答

1

你是否考虑使用并实现UIScrollViewDelegate协议的“普通”方法?如果您不需要问题中未提到的其他功能,那么它们应该足够满足您的需求:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    NSLog(@"scrolling now");
}

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    NSLog(@"stop scrolling");
}

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    NSLog(@"going to scroll");
}

是的,我可以使用scrollview代理方法。但我对手势状态非常感兴趣。 - RomanHouse

0

你展示给我们的代码正按照设计的方式运行。我认为你期望的事情不会发生。

更准确地说,GestureRecognizer 仅仅识别用户在屏幕上做出的物理手势。因此,会有重复的小手势发生,并且开始和结束状态会反复发生。如果你通过触摸并保持住,然后缓慢来回移动手势,你应该只能看到一个结束状态 - 当用户松开手时。

但是@meronix是正确的,他说你期望从手势识别器中得到的是当滚动视图停止滚动时,这可能会在用户手势完成很久之后。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接