我的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];
尽管如此,它在可用性方面并不是完美的解决方案......
答案 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提问。