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所有时间(因为它应该改变状态)。检测手势识别器结束状态的正确方法是什么?

4

2 回答 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");
}
于 2013-01-28T14:06:29.590 回答
0

您向我们展示的代码的行为与设计完全一致。我想你在期待一些不会发生的事情。

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

但是@meronix 的说法是正确的,这听起来像是您对手势识别器的期望是当滚动视图停止滚动时,这可能在用户手势完成后很长时间。

于 2013-01-31T11:34:57.850 回答