UITwipeGestureRecognizer被UITapGestureRecognizer阻止

Pau*_*nne 3 uigesturerecognizer ios

我有一个需要处理平移,点击和滑动手势的视图.我有平移和点击工作,但是当我添加滑动时,它不起作用.奇怪的是,似乎水龙头以某种方式阻止滑动,因为如果我移除水龙头,那么滑动工作正常.这是我创建手势识别器的方法.

- (void) initGestureHandlers
{
    UISwipeGestureRecognizer *swipeLeftGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeLeftGesture:)];
    swipeLeftGesture.numberOfTouchesRequired = 1;
    swipeLeftGesture.direction = UISwipeGestureRecognizerDirectionLeft;
    [self addGestureRecognizer:swipeLeftGesture];

    UISwipeGestureRecognizer *swipeRightGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeRightGesture:)];
    swipeRightGesture.numberOfTouchesRequired = 1;
    swipeRightGesture.direction = UISwipeGestureRecognizerDirectionRight;
    [self addGestureRecognizer:swipeRightGesture];

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
    [tapGesture setNumberOfTapsRequired:1];
    [self addGestureRecognizer:tapGesture];

    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
    [self addGestureRecognizer:panGesture];
}
Run Code Online (Sandbox Code Playgroud)

很多博客建议使用requireGestureRecognizerToFail来处理双击之前点击的情况,所以我尝试了,但它也没有用.

    [tapGesture requireGestureRecognizerToFail:swipeLeftGesture];
    [tapGesture requireGestureRecognizerToFail:swipeRightGesture];
Run Code Online (Sandbox Code Playgroud)

如何在同一视图中点击并滑动?

Iro*_*Man 7

评论或删除行

 //[tapGesture requireGestureRecognizerToFail:swipeLeftGesture];
 //[tapGesture requireGestureRecognizerToFail:swipeRightGesture];
Run Code Online (Sandbox Code Playgroud)

同时将所有guest虚拟机对象委托给self.像这样

- (void) initGestureHandlers
{
    UISwipeGestureRecognizer *swipeLeftGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeLeftGesture:)];
    swipeLeftGesture.numberOfTouchesRequired = 1;
    swipeLeftGesture.direction = UISwipeGestureRecognizerDirectionLeft;
    swipeLeftGesture.delegate = self;
    [self addGestureRecognizer:swipeLeftGesture];

    UISwipeGestureRecognizer *swipeRightGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeRightGesture:)];
    swipeRightGesture.numberOfTouchesRequired = 1;
swipeRightGesture = self;
    swipeRightGesture.direction = UISwipeGestureRecognizerDirectionRight;
    [self addGestureRecognizer:swipeRightGesture];

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
    [tapGesture setNumberOfTapsRequired:1];
    [self addGestureRecognizer:tapGesture];
tapGesture.delegate = self;

    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
    [self addGestureRecognizer:panGesture];
panGesture.delegate = self;
}
Run Code Online (Sandbox Code Playgroud)

像这样实现委托方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}
Run Code Online (Sandbox Code Playgroud)