滑动和平移手势重叠

3

有没有可能让特定手势失败,以便识别下一个可能的手势?

具体来说,请看以下示例片段:

UISwipeGestureRecognizer *swipeLeft = [initialize UISwipeGestureRecognizer... @selector(handleSwipe:)]

swipeLeft = UISwipeGestureRecognizerDirectionLeft;

swipeLeft.delegate = self;

UIPanGestureRecognizer *pan = [initialize UIPanGestureRecognizer... @selector(handlePan:)]

pan.delegate = self;

[pan requireGestureRecognizerToFail:swipeLeft];

以上代码表明,如果设备无法识别左滑手势,则将使用平移手势处理程序。
那么我的问题是:是否有可能让左滑手势在被设备识别为左滑触摸后,根据在handleSwipe中检查的某些标准故意失败,并让平移手势处理触摸输入?
谢谢。
2个回答

11

识别同时手势并不能给我想要的行为。向左滑动应该将UIView从一个位置移动到另一个位置,而平移手势也会移动它,但基于您的触摸平移和速度。谢谢。 - rgb
听起来像是 pan recognizer 可以让你用手指移动视图,但如果检测到滑动操作,你可以设置一个标志告诉 pan 停止工作,因为滑动行为将接管。你认为这样做能实现你想要的吗? - Eric
这是一个很好的想法,也是我正在努力实现的目标。不过,是否有更简单的实现方式,而不需要编写或覆盖自己的touchesBegan、Moved、Ended方法来标记并让当前手势停止并传递到下一个手势行为呢?谢谢。 - rgb
是的,我建议保留您的手势方法,在我提到的委托方法中返回YES,然后在内部类属性(一个BOOL应该足够了,我想)中添加一个名为didSwipe的变量。在您的滑动识别方法的开头,将其设置为YES - 这只会在识别到滑动时发生。在您的平移方法中,将整个内容包裹在一个if语句中:if (!self.didSwipe) {...},所以这部分只有在没有滑动或尚未发生滑动时才会执行。您可能还需要在某个时候重置该变量。 - Eric
谢谢您的建议,我认为这个解决方案会起作用。我会实施它并查看是否能够获得所需的行为。 - rgb

0

假设您已经实现了一些其他处理程序来处理平移手势,那么您只需执行以下操作:

-(void)handleSwipe:(id)sender {

    if //criteria is met to ignore left swipe
    {
        [self handlePan:self];   
    }
}

-(void)handlePan:(id)sender {

    // handle pan gesture here

}

这可能可行,但是handlePan(带有自己的touchesBegan、Moved、Ended实现,对于新手来说有点复杂)实际上是在另一个库中使用的,在视图控制器上。谢谢。 - rgb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接