带有平移手势识别器的UICollectionViewCell

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有平移手势识别器的UICollectionViewCell相关的知识,希望对你有一定的参考价值。

我用UICollectionViewCell设置我的UIPanGestureRecognizer,它应该像你经常在UITableViewCells中看到的那样,在内容下面显示控件。我的问题应该同时适用于UICollectionViewsUITableViews

我让它工作,以便细胞中的水平平底锅与UICollectionView的垂直平底锅同时工作。只需通过实现UIGestureRecognizer的委托方法即可启用:

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

这允许它们同时工作,但它也有副作用,因为我在UICollectionView垂直平移,任何轻微的水平移动将触发我在碰到启动垂直平移时触摸的单元格中的gestureRecognizer,从而揭示基础控制。我不想要这个。

邮件处理完美,所以fx。在UITableView中的垂直平移,禁用单元格中的任何水平平移手势,反之亦然。

我可以通过正确设置手势识别器以一种简单的方式实现这一目的吗?

我想避免一个解决方案,我必须在视图之间管理状态(“滚动视图拖动”,“单元格拖动”等)。

答案

可以在WWDC 2014视频中看到此问题的解决方案:“高级滚动视图和触摸处理技术”。在他们解释如何使用多个触摸滚动时实现拖动的部分中。我们的想法是禁用然后重新启用您不想与当前正在运行的手势识别器并行运行的手势识别器。在你的情况下,你需要继承collectionViewtableView,以便override实现平移手势识别器。

另一答案

第一:

我让它工作,以便单元格中的水平平移与CollectionView的垂直平移同时工作。只需通过实现UIGestureRecognizer的委托方法即可启用此功能。

后来:

邮件处理完美,所以fx。 TableView中的垂直平移,禁用单元格中的任何水平平移手势,反之亦然。

你要求两种相反的行为。确定您希望应用实现哪一个。

如果您希望手势同时工作(设计错误IMO),请将gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer:保留在您的代码中。

如果您希望它们像在Mail应用程序中那样工作(它们通常在表视图中执行的方式),请删除有问题的代码行。

此外,在表视图中实现它的方式是使用滚动视图。所以你可能想要研究一下。

以上是关于带有平移手势识别器的UICollectionViewCell的主要内容,如果未能解决你的问题,请参考以下文章

使用平移手势识别器关闭视图控制器

滚动视图平移防止捏手势?

AVPlayer 使用平移手势快进/后退

带有手势的 UITapGestureRecognizer

SWRevealViewController 平移手势识别器问题

平移手势识别器的三层混淆