【发布时间】:2014-04-28 10:15:00
【问题描述】:
我有两个全屏孩子UICollectionViews。一个是在另一个上的透明覆盖。当我在屏幕上拖动时,我希望它们都做出响应 - 当它是水平拖动时它们都响应,而当它是垂直拖动时只有它们一个,有点像一些媒体中心的主屏幕。如果不重新实现私有的UICollectionView 手势识别器,这是否可行,如果可以,如何实现?
如果没有,那么任何指向示例重新实现的指针都将不胜感激。
我知道或尝试过的一些事情:
我在 View Controller 上有一个带有延迟开始的平移手势识别器,它可以在事件发送到视图之前检测垂直或水平移动。
我知道简单地从我的父视图的touchesBegan: 等转发事件是行不通的,因为触摸的视图属性设置为我的父视图,并且 UITouches 不能被复制(至少天真),因为它们没有'不实现 NSCopying 协议。或许我可以合成合适的 UITouch 事件并转发?
我知道我可以手动发送scrollToItemAtIndexPath:atScrollPosition:animated: 消息,但我更喜欢收藏集的自然拖动、滑动和快照分页行为。
或者,是否可以修改私有手势识别器的委托并实现gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: - 无需显式访问私有 API - 以允许两个集合看到触摸?响应者链是否足够聪明,可以使用来自两个兄弟视图的手势识别器来调用它?
另一种方法可能是手动控制叠加层,而不是将其作为集合视图进行管理,但集合视图似乎更自然,理论上提供了我想要的开箱即用的交互性。这个盒子,目前看来需要撬棍才能进去!
This question 看起来很相似(如果不太明确的话),并且没有答案。我看过的其他问题似乎都是关于添加捏合,或者让集合的子视图也响应手势;不是我的情况。
我有点摸不着头脑,感谢您的指点。
【问题讨论】:
标签: ios uicollectionview uigesturerecognizer