我想在滑动时禁用平移手势,如果我平移则禁用滑动,但我最终激活了无论是平移还是滑动。我有什么不妥之处吗?
#pragma mark - UIGestureRecognizerDelegate methods
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
if ([otherGestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
[otherGestureRecognizer requireGestureRecognizerToFail:gestureRecognizer];
NSLog(@"added failure requirement to: %@", otherGestureRecognizer);
}
if ([gestureRecognizer isKindOfClass:[UISwipeGestureRecognizer class]]) {
[[BTHomeViewController sharedInstance].revealViewController.panGestureRecognizer requireGestureRecognizerToFail:gestureRecognizer];
}
if ([otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
[left requireGestureRecognizerToFail:[BTHomeViewController sharedInstance].revealViewController.panGestureRecognizer];
[right requireGestureRecognizerToFail:[BTHomeViewController sharedInstance].revealViewController.panGestureRecognizer];
}
return YES;
}
答案 0 :(得分:3)
这两个手势很难结合起来。问题是你通常希望平移手势立即执行(它会这样做),但是滑动手势需要一点时间才能被识别,因为用户必须将手指拖动一些路径。
无论如何,您通常可以考虑两个程序:
首先是让两个手势同时识别(你已经做过)。您需要添加的是当识别滑动手势时,只需删除平移手势调用。要做到这一点,你需要做的只是panGesture.enabled = NO; panGesture.enabled = YES;
这两行简单地一个接一个地调用,手势不会触发,直到另一个触摸开始。
其次是等待查看是否会识别滑动。要做到这一点,最简单的方法是用长按手势替换平移手势。请注意,长按手势的作用与平移手势完全相同,但您可以将其设置为适当的minimumPressDuration
(您希望识别滑动的持续时间)和适当的allowableMovement
。你的情况。
答案 1 :(得分:0)
我遇到了同样的问题。
我使用UIGestureRecognizerDelegate玩了很多但没有运气。
我所做的是决定什么时候播放" pan"应被视为"刷卡"基于速度和手势完成。因此,如果用户开始平移并且速度小于某个值,请继续,如果用户快速平移并完成手势,则触发"轻扫"。
这符合我的业务需求。希望它有所帮助。
答案 2 :(得分:0)
通过手势创建关系以实现:
panGesture.require(toFail: swipeGesture)