在 UICollectionViewCell 中滑动 UIView 会阻止滚动功能

Posted

技术标签:

【中文标题】在 UICollectionViewCell 中滑动 UIView 会阻止滚动功能【英文标题】:Sliding UIView in a UICollectionViewCell is blocking the ability to scroll 【发布时间】:2013-02-22 12:00:57 【问题描述】:

我在UIView 上使用UIPanGestureRecognizer,它位于UICollectionViewCell 中。我正在使用translationInView 方法来获得沿X 轴的平移并左右滑动UIView。它工作正常,但现在如果我的手指在单元格上,我无法在 CollectionView 中上下滚动。有没有办法让PanGestureRecognizer 将垂直滚动传递给UICollectionView

我正在尝试复制在 Reeder.app for ios 中看到的滑动。

【问题讨论】:

您好,您能否验证所提出的解决方案是否有效?它似乎适用于其他用户。谢谢! 【参考方案1】:

一旦UIPanGestureRecognizer 在您的UIView 中激活,触摸将不再通过响应者链转发,因为您的UICollectionView 不再接收触摸。

您可以尝试将您的UIView 设置为您的UIPanGestureRecognizer 的代表,并放置UIPanGestureRecognizer 是否应该激活的逻辑。你必须在你的 UIView 中实现委托的方法:

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;

例如,使用下面的代码,如果视图的 y 轴上的速度大于 x 轴的速度,您会告诉它不要激活(因此将触摸发送到它下面的 UICollectionView

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

    UIPanGestureRecognizer *recognizer = (UIPanGestureRecognizer *)gestureRecognizer;
    CGPoint velocity =[recognizer velocityInView:self];
    if(abs(velocity.y)>=(abs(velocity.x)))
        return NO;
    else return YES;


希望这有帮助。

【讨论】:

这很好用。我需要将其更改为“velocityInView:self.view”才能在我的视图控制器中工作。此外,由于这是针对 UICollectionViewCell 上的平移手势,因此在 collectionView:cellForItemAtIndexPath: 中创建单元格时设置委托很方便

以上是关于在 UICollectionViewCell 中滑动 UIView 会阻止滚动功能的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 Qualtrics 中滑块问题左侧的选择文本?

平板电脑宽度中滑块导航的定位问题

CSS - Firefox 中滑块的宽度

Android中滑屏实现----手把手教你如何实现触摸滑屏以及Scroller类详解

touchstart,touchmove判断手机中滑屏方向

touchstart,touchmove判断手机中滑屏方向