13

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

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

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

当然,我可以设置一个 NSTimer 以在一段时间后再次自动显示覆盖,但我的代码中看不到明显的错误,我希望它干净。

有什么我想念的吗?它是苹果的错误吗?

初始化是这样的:

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
}
4

1 回答 1

0

线

[self addGestureRecognizer:pan];

在我看来不对。

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

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

于 2014-05-15T13:34:08.087 回答