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

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

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

【问题讨论】:

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

标签: objective-c cocoa-touch uicollectionview uipangesturerecognizer uicollectionviewcell


【解决方案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: 中创建单元格时设置委托很方便
猜你喜欢
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多