同一视图上的MultipleGesture

问题描述 投票:0回答:4

我在视图上添加了两个手势。一个是轻击手势,另一个是轻扫手势。每当用户尝试滑动视图时,点击手势方法就会被调用(检测到轻击手势)。可能是什么原因 ?在这种情况下,应该忽略点按手势。

下面是代码。

UISwipeGestureRecognizer *swipeGest = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(itemSwiped:)];
 swipeGest.direction =  UISwipeGestureRecognizerDirectionUp ;
[messageView addGestureRecognizer:swipeGest];

UITapGestureRecognizer *gest = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(itemSelected:)];
[messageView addGestureRecognizer:gest];
ios objective-c uitapgesturerecognizer uiswipegesturerecognizer
4个回答
0
投票

使用此委托方法来避免其他手势

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{

        if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {

            [otherGestureRecognizer requireGestureRecognizerToFail:gestureRecognizer];
            return false;
        }else if([gestureRecognizer isKindOfClass:[UISwipeGestureRecognizer class]]){
            [otherGestureRecognizer requireGestureRecognizerToFail:gestureRecognizer];
            return false;
        }

        return true;

    }

0
投票

因为您在同一视图上使用多个手势。这可能会过度隐藏另一个属性。对于Ex:第一个手势识别器识别手势(在这种情况下点击)它取消所有触摸事件。因此,剩余的手势识别器将永远不会完成识别,并且永远不会触发他们的事件。

要在同一视图上添加多个UIGestureRecognizer,您需要设置委托属性(UIGestureRecognizerDelegate

yourGesture.delegate = self

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
        shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{


 if (gestureRecognizer isKindOfClass: [UISwipeGestureRecognizer class] || gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]) {
            return YES
        } else {
            return NO
        }
}

0
投票

试试这个;

UISwipeGestureRecognizer *swipeGest = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(itemSwiped:)];
swipeGest.direction =  UISwipeGestureRecognizerDirectionUp ;
[messageView addGestureRecognizer:swipeGest];

UITapGestureRecognizer *gest = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(itemSelected:)];
gest.numberOfTapsRequired = 1;
[messageView addGestureRecognizer:gest];


-(void)itemSwiped:(UISwipeGestureRecognizer*)gesture
{
  NSLog(@"swipe");
}

-(void)itemSelected:(UITapGestureRecognizer*)gesture
{
  NSLog(@"tap");
}

0
投票

更改单击以双击手势。所以你可以确保用户只需双击或滑动。这是我的好建议,请关注它。

© www.soinside.com 2019 - 2024. All rights reserved.