带有平移手势识别器的UICollectionViewCell

时间:2014-07-19 19:17:10

标签: ios objective-c uitableview uicollectionview uigesturerecognizer

我已将UICollectionViewCell设置为UIPanGestureRecognizer,其效果应与您在UITableViewCells中经常看到的显示内容下方控件的内容相同。我的问题应该同时适用于UICollectionViewsUITableViews

我让它工作,以便单元格中的水平平移与UICollectionView的垂直平移同时工作。只需实现UIGestureRecognizer

的委托方法即可启用此功能
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

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

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

我是否可以通过正确设置手势识别器以简单的方式实现此目的?

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

首先:

  

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

随后:

  

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

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

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

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

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