iOS中,多手势之间的冲突和解决方案

涉及到手势冲突的问题,网上最常见的有一种方法,在这里先记录下来:
在iOS中,如果一个手势A的识别部分是另一个手势B的子部分时,默认情况下A就会先识别,B就无法识别了。要解决这个冲突可以利用

- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer;

方法来完成。这个方法可以指定某个手势执行的前提是另一个手势失败才会识别执行。

//解决在图片上滑动时拖动手势和轻扫手势的冲突
[panGesture requireGestureRecognizerToFail:swipeGestureToRight];
[panGesture requireGestureRecognizerToFail:swipeGestureToLeft];
//解决拖动和长按手势之间的冲突
[longPressGesture requireGestureRecognizerToFail:panGesture];

有一个这个方法:

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

可以实现同一视图多个手势操作,这个代理方法默认返回NO,会阻断继续向下识别手势,如果返回YES则可以继续向下传播识别

但是我之前在做的一个图片单击翻页、双击放大的时候,就是点击手势不同的点击次数相互冲突的问题,这个方法不管用,于是我用了下面的这个方法解决的手势冲突问题

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    touch = [touches anyObject];

    NSTimeInterval delaytime = 0.4;//自己根据需要调整
    //这个时间就是多长时间之内,只能识别一个手势进来
    switch (touch.tapCount) {
        case 1:
            [self performSelector:@selector(handleSingleTap:) withObject:nil afterDelay:delaytime];
            //单击执行的方法,有一个时间的延时
            break;
        case 2:
            [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(handleSingleTap:) object:nil];//双击
            [self performSelector:@selector(handleDoubleTap:) withObject:nil afterDelay:delaytime];
            break;
        case 3:
            [self handleTripleTap:touch];
            break;
        default:
            break;
    }
    [[self nextResponder] touchesEnded:touches withEvent:event];

}

只需要在你的代码里加入这一段,然后把点击的手势对应的放到里面的方法里,就解决了点击手势次数冲突的问题了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值