0

我有一个UIView这样的UILongPressGestureRecognizer

    movementGestureRecognizer = [[UILongPressGestureRecognizer alloc] init];
    [movementGestureRecognizer setDelegate:self];
    [movementGestureRecognizer setMinimumPressDuration:0.0f];
    [self addGestureRecognizer:movementGestureRecognizer];

看名字就知道了,习惯了,一长按就UIView可以左右移动了。

问题是,我还希望能够添加一些其他类型的手势,例如:

       optionsGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(options:)];
        [optionsGestureRecognizer setNumberOfTapsRequired:2];
        [self addGestureRecognizer:optionsGestureRecognizer];

问题是,我无法打电话options:,因为movementGestureRecognizer“吸”了所有的手势。有没有办法阻止、取消movementGestureRecognizer或延迟呢?


编辑 1.0

如果我执行以下操作,options:我可以拨打电话:TapGestureRecognizer

    [movementGestureRecognizer setMinimumPressDuration:0.1f];

尽管如此,就可用性而言,它并不是完美的解决方案......

4

3 回答 3

0

通过执行以下操作,我能够找到解决方案:

1)在 my 上实现一个“状态机” ,根据它的状态UIView禁用和启用。UIGestureRecognizers

2) 使用 aUIPanGestureRecognizer来移动UIView's

3)还有这个问题。

于 2012-10-17T13:35:56.327 回答
0

轻击和长按之间的区别在于您在将手指从触摸表面释放之前按住了多长时间。因此,您希望最小的按下持续时间大于 0。

此外,您还可以执行以下操作:

movementGestureRecognizer.delaysTouchesBegan = NO;
movementGestureRecognizer.delaysTouchesEnded = NO;

这将允许系统识别轻按和长按。

于 2012-10-15T13:25:12.990 回答
0

我不太确定,但你可以尝试gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:像这样实现委托吗:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

此外,您可以像这样指定手势识别器之间的依赖关系:

[optionsGestureRecognizer requireGestureRecognizerToFail: movementGestureRecognizer];

我建议您阅读UIGestureRecognizer 类参考中的详细信息!

您还可以在此处找到详细说明同一主题的好帖子!

于 2012-10-15T12:57:33.263 回答