我用UICollectionViewCell
设置我的UIPanGestureRecognizer
,它应该像你经常在UITableViewCells
中看到的那样,在内容下面显示控件。我的问题应该同时适用于UICollectionViews
和UITableViews
。
我让它工作,以便细胞中的水平平底锅与UICollectionView
的垂直平底锅同时工作。只需通过实现UIGestureRecognizer
的委托方法即可启用:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
这允许它们同时工作,但它也有副作用,因为我在UICollectionView
垂直平移,任何轻微的水平移动将触发我在碰到启动垂直平移时触摸的单元格中的gestureRecognizer
,从而揭示基础控制。我不想要这个。
邮件处理完美,所以fx。在UITableView
中的垂直平移,禁用单元格中的任何水平平移手势,反之亦然。
我可以通过正确设置手势识别器以一种简单的方式实现这一目的吗?
我想避免一个解决方案,我必须在视图之间管理状态(“滚动视图拖动”,“单元格拖动”等)。
可以在WWDC 2014视频中看到此问题的解决方案:“高级滚动视图和触摸处理技术”。在他们解释如何使用多个触摸滚动时实现拖动的部分中。我们的想法是禁用然后重新启用您不想与当前正在运行的手势识别器并行运行的手势识别器。在你的情况下,你需要继承collectionView
和tableView
,以便override
实现平移手势识别器。
第一:
我让它工作,以便单元格中的水平平移与CollectionView的垂直平移同时工作。只需通过实现UIGestureRecognizer的委托方法即可启用此功能。
后来:
邮件处理完美,所以fx。 TableView中的垂直平移,禁用单元格中的任何水平平移手势,反之亦然。
你要求两种相反的行为。确定您希望应用实现哪一个。
如果您希望手势同时工作(设计错误IMO),请将gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer:
保留在您的代码中。
如果您希望它们像在Mail应用程序中那样工作(它们通常在表视图中执行的方式),请删除有问题的代码行。
此外,在表视图中实现它的方式是使用滚动视图。所以你可能想要研究一下。