【问题标题】:Detecting UIGestureStateEnded in default UIScrollView pan gesture recognizer在默认 UIScrollView 平移手势识别器中检测 UIGestureStateEnded
【发布时间】:2013-01-11 21:17:23
【问题描述】:

我的代码:

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

【问题讨论】:

    标签: iphone ios objective-c uiscrollview uigesturerecognizer


    【解决方案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");
    }
    

    【讨论】:

    • 是的,我可以使用滚动视图委托方法。但我对手势状态完全感兴趣。
    【解决方案2】:

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

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

    但@meronix 说得对,这听起来像是您对手势识别器的期望是滚动视图停止滚动,这可能是在用户手势完成后

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多