在UIScrollView的子视图中使用水平UISwipeGestureRecognizer?(UIScrollView仅需要识别垂直滚动)

3

我有一个UIScrollView,在其中添加了一个子视图。UIScrollView在垂直方向上可以很好地滚动,并且这就是它应该做的全部内容。现在,我想在子视图中通过UISwipeGestureRecognizer来识别左右滑动操作。我知道这是可能的,但我没有找到解决方案,尝试了几次也不成功。

2个回答

5
尝试以下操作:
  • Set the delegate of your UIGestureRecognizer and

  • Implement shouldRecognizeSimultaneouslyWithGestureRecognizer:

    -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
    }
    
  • Implement shouldReceiveTouch:

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    {
     return YES;
    }
    
希望这能帮到你。

不行,我之前尝试过了,但没有成功 :(. 我认为UIScrollView会吞噬掉每一个检测到的拖动。 - the_critic
是的,我确实实现了-shouldRecognizeSimultaneouslyWithGestureRecognizer::,但奇怪的是它们没有被调用... - the_critic
不,我不会将手势识别器添加到UIScrollView中,因为我只想在子视图中进行手势识别。将其添加到滚动视图中没有任何意义,对吧? - the_critic
我认为问题实际上是我将子视图嵌套在许多其他视图中。有没有办法让触摸事件穿透所有视图? - the_critic
所以我有一个滚动视图,在其中添加内容视图,然后在此内容视图中添加子视图,我想在其中检测触摸。因此,滑动基本上必须通过内容视图进行。 - the_critic
显示剩余3条评论

0
我用新的iOS 7 UIGestureRecognizerDelegate方法成功地实现了一些相关操作(直接在滚动视图上添加两个手指轻扫手势识别器)。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
        shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return otherGestureRecognizer == scrollView.panGestureRecognizer;
}

然而,结果并不完美 - 等待滑动手势识别器失败的延迟会导致滚动视图的平移手势识别器在获取触摸时出现延迟,因此当您开始滚动时,正常的滚动明显会有所延迟。

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