UIGestureRecognizers依赖项

时间:2012-10-15 11:33:32

标签: objective-c ios uiview uigesturerecognizer touches

我的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];

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

3 个答案:

答案 0 :(得分:0)

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

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

另外,您可以指定手势识别器之间的依赖关系,如下所示:

[optionsGestureRecognizer requireGestureRecognizerToFail: movementGestureRecognizer];

我建议您阅读UIGestureRecognizer Class Reference中的详细信息!

您还可以找到一篇关于同一主题here详细阐述的好文章!

答案 1 :(得分:0)

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

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

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

这将允许系统识别水龙头以及长按。

答案 2 :(得分:0)

我能够通过以下方式获得解决方案:

1)在UIView上实施“状态机”,方法是根据状态禁用和启用UIGestureRecognizers

2)使用UIPanGestureRecognizer移动UIView's

3)并this提问。