如果用户在负方向上平移x和y,UIPanGestureRecognizer不会切换到"结束"或"取消"状态

Dun*_*ern 13 gesture-recognition pan ipad uigesturerecognizer ios

我对UIPanGestureRecognizer有一点问题.如果用户平移到左上角(表示负x和y方向),则识别器不会报告UIGestureRecognizerStateEnded状态

如果用户抬起手指时任何方向为正,则状态更改为UIGestureRecognizerStateEnded,但如果两个方向均为负或零,则仅停止报告操作.

这很糟糕,因为我隐藏了一些叠加视图,只要用户拖动某些内容并且这些视图在失败的情况下不会返回.

当然我可以设置一个NSTimer来重新显示一段时间后再次显示覆盖,但我可以看到我的代码中没有明显的错误,我希望它干净.

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

初始化是这样的:

pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panRecognized:)];
[self addGestureRecognizer:pan];
[pan release];
Run Code Online (Sandbox Code Playgroud)

处理函数如下所示:

- (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
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ose 0

线路

[自我添加GestureRecognizer:pan];

我觉得不对。

看起来您正在从 UIView 而不是UIViewController. 因此,如果视图被解除分配,它和手势识别器都将消失。

最好从UIViewController. 还UIViewController需要对识别器保持强项。