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

时间:2013-01-28 13:58:38

标签: iphone ios objective-c uiscrollview uigesturerecognizer

我的代码:

[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 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分:0)

您向我们展示的代码表现完全符合设计。我认为你期待的事情不会发生。

更准确。 GestureRecognizer 识别用户在屏幕上进行的物理手势。因此,一再发生小手势,开始和结束状态反复发生。如果您通过触摸并按住并缓慢前后移动来制作手势,则应该只看到一端 - 当用户放开时。

但是@meronix的说法听起来像是你从手势识别器中得到的结果是滚动视图停止滚动,在用户手势完成后可能