【问题标题】:UIPanGestureRecognizer does not switch to state "End" or "Cancel" if user panned x and y in negative direction如果用户在负方向平移 x 和 y,UIPanGestureRecognizer 不会切换到状态“结束”或“取消”
【发布时间】:2011-05-26 14:04:35
【问题描述】:

我在使用 UIPanGestureRecognizer 时遇到了一点问题。 识别器不报告 UIGestureRecognizerStateEnded 用户是否平移到左上角的状态(表示负 x 和 y 方向)

如果有任何方向,状态将更改为 UIGestureRecognizerStateEnded 当用户抬起手指时是肯定的,但它只是停止报告 如果两个方向都是负数或零,则采取行动。

这很糟糕,因为我隐藏了一些覆盖视图,只要用户 拖动一些东西,这些视图在失败的情况下不会返回。

当然我可以设置一个 NSTimer 来显示覆盖 再次自动计时,但我在我的代码中看不到明显的错误,并且 我要干净。

我错过了什么吗?是不是 Apple Bug?

初始化是这样的:

pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panRecognized:)];
[self addGestureRecognizer:pan];
[pan release];

处理函数如下所示:

- (void)panRecognized:(UIPanGestureRecognizer *)gestureRecognizer {
    switch ([gestureRecognizer state]) {
        case UIGestureRecognizerStateBegan:
            // fade some overlaying views out
            break;
        case UIGestureRecognizerStateEnded:
        case UIGestureRecognizerStateCancelled:
        case UIGestureRecognizerStateFailed:
            // fade in the overlays
            break;
        default:
            break;
    }

    // handle panning
}

【问题讨论】:

  • 过去,当我不小心将手势识别器移除/移动到不同的视图时,这发生在我身上。只要你这样做,它就会安静下来。你的情况不是这样吗?
  • 不确定到底发生了什么,但尝试通过考虑所有可能的 UIGestureRecognizerStates 来记录状态更改,以查看交互过程中发生了什么
  • 也发生在我身上。将 uiview.addGestureRecognizer 从我的 VC 的 viewDidLayoutSubviews 转移到 viewWillAppear 解决了这个问题,仍在寻找理由。

标签: ios ipad uigesturerecognizer gesture-recognition pan


【解决方案1】:

线

[self addGestureRecognizer:pan];

我觉得不对。

您似乎是从 UIView 而不是 UIViewController 内部创建手势识别器。因此,如果视图被解除分配,它和手势识别器都会消失。

最好从UIViewController 创建手势识别器。此外,UIViewController 需要对识别器保持强项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多