【问题标题】:Allow both single tap gesture recognizer and double tap in UIScrollView在 UIScrollView 中允许单击手势识别器和双击
【发布时间】:2015-03-27 10:32:14
【问题描述】:

所以我在 UIScrollView 中有一个 UIImageView,我需要同时捕获: - 单击手势 - 双击手势 对于 UIImageView

双击手势应该作为缩放动作发送到 UIScrollView 单击手势由我自己创建的 UITapGestureRecognizer 捕获。 双击手势比单击具有更高的优先级(当有双击时,放大滚动视图,否则执行单击)

到目前为止,如果我将单击手势识别器添加到滚动视图,单击会立即被识别,并且无法识别双击。

如果我将单击手势识别器添加到图像视图中,它永远不会收到任何操作,但双击可以工作

感谢任何建议,谢谢..

【问题讨论】:

    标签: ios objective-c uiscrollview


    【解决方案1】:

    试试这个代码,

    目标 - C

     UITapGestureRecognizer *singletap = [[UITapGestureRecognizer alloc]
                                                         initWithTarget:self
                                                         action:@selector(singleTap:)];
        singletap.numberOfTapsRequired = 1;
        singletap.numberOfTouchesRequired = 1;
    
    [scrollView addGestureRecognizer:singletap];
    
    
    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc]
                                                     initWithTarget:self
                                                     action:@selector(doubleTap:)];
    doubleTap.numberOfTapsRequired =2 ;
    doubleTap.numberOfTouchesRequired = 1;
    
    [scrollView addGestureRecognizer:doubleTap];
    
    
    
    [singleTap requireGestureRecognizerToFail:doubleTap];
    

    Swift 3.0

    var singletap = UITapGestureRecognizer(target: self, action: #selector(self.singleTap))
    singletap.numberOfTapsRequired = 1
    singletap.numberOfTouchesRequired = 1
    scrollView.addGestureRecognizer(singletap)
    var doubleTap = UITapGestureRecognizer(target: self, action: #selector(self.doubleTap))
    doubleTap.numberOfTapsRequired = 2
    doubleTap.numberOfTouchesRequired = 1
    scrollView.addGestureRecognizer(doubleTap)
    singleTap.require(toFail: doubleTap)
    

    【讨论】:

      【解决方案2】:

      最佳答案实际上是倒置了最后一行。正确的代码应该是:

      [singleTap requireGestureRecognizerToFail:doubleTap];
      

      【讨论】:

        【解决方案3】:
        UITapGestureRecognizer *tapRecognizerForSingleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapAction:)];
        [tapRecognizerForSingleTap setNumberOfTapsRequired:1];
        
        UITapGestureRecognizer *tapRecognizerForDoubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapAction:)];
        [tapRecognizerForDoubleTap setNumberOfTapsRequired:2];
        

        两者都添加到同一个图像视图中,要实现您想要的,只需添加以下行。

        [tapRecognizerForSingleTap requireGestureRecognizerToFail:tapRecognizerForDoubleTap];
        

        通过上述行,您要求单击将仅在不是双击时识别。

        【讨论】:

        • 但是双击的点击识别器是uiscrollview的内部识别器,这仍然有效吗?
        • 我刚试过[singleTap requireGestureRecognizerToFail:_scrollView.gestureRecognizers[0]];,程序崩溃了..
        猜你喜欢
        • 1970-01-01
        • 2016-12-26
        • 2017-06-13
        • 1970-01-01
        • 1970-01-01
        • 2021-09-27
        • 1970-01-01
        • 2019-06-20
        • 1970-01-01
        相关资源
        最近更新 更多