UILongPressGestureRecognizer 缺少 UIGestureRecognizerStateBegan 状态!

Posted

技术标签:

【中文标题】UILongPressGestureRecognizer 缺少 UIGestureRecognizerStateBegan 状态!【英文标题】:UILongPressGestureRecognizer missing UIGestureRecognizerStateBegan state! 【发布时间】:2010-07-26 22:12:52 【问题描述】:

所以我实现了一个单指长按手势识别器,但识别器似乎总是缺少 UIGestureRecognizerStateBegan 状态... 如果我在没有移动手指的情况下长按并抬起,我会收到 StateEnded 调试消息。 如果我长按并稍微移动手指然后抬起,我会收到 StateChanged 和 StateEnded 调试消息。 但我从未见过 StateBegan。

UIPanGestureRecognizer 没有这个问题 - Pan 从 Began->Changed->Ended 获取所有正确的手势状态。

- (void)handleLongPress:(UILongPressGestureRecognizer *)recognizer 
    CGPoint location = [recognizer locationInView:self];

    switch (recognizer.state) 
        case UIGestureRecognizerStateBegan:
            NSLog(@"!!!!handleLongPress: StateBegan !!!!!");
            break;
        case UIGestureRecognizerStateChanged:
            NSLog(@"!!!!handleLongPress: StateChanged !!!!!");
            break;
        case UIGestureRecognizerStateEnded:
            NSLog(@"!!!!handleLongPress: StateEnded !!!!!");
            break;
        default:
            break;
       

【问题讨论】:

您的代码对我来说似乎运行良好。您是否在点击和平移手势识别器之间设置了任何类型的依赖关系,或者您在该视图上是否还有任何其他识别器? 我的任何手势识别器之间没有依赖关系。是的,我在这个观点上确实有几个识别者。我被难住了... :( 【参考方案1】:

我遇到了类似的问题,它是由 UILongPressGestureRecognizer 设置引起的:我使用的原始示例代码指定 numberOfTapsRequired = 1,我必须快速点击并释放,然后长按才能使其工作,而不仅仅是点击并按住几秒钟。当我删除 numberOfTapsRequired 时,代码现在的行为符合我的预期。希望这会有所帮助 =)

【讨论】:

哈,我真傻!我刚刚看到一年多前提出的原始问题,但无论如何,希望我的回答可以帮助其他人;-)

以上是关于UILongPressGestureRecognizer 缺少 UIGestureRecognizerStateBegan 状态!的主要内容,如果未能解决你的问题,请参考以下文章