在 UICollectionViewCell 中滑动 UIView 会阻止滚动功能
Posted
技术标签:
【中文标题】在 UICollectionViewCell 中滑动 UIView 会阻止滚动功能【英文标题】:Sliding UIView in a UICollectionViewCell is blocking the ability to scroll 【发布时间】:2013-02-22 12:00:57 【问题描述】:我在UIView
上使用UIPanGestureRecognizer
,它位于UICollectionViewCell
中。我正在使用translationInView
方法来获得沿X 轴的平移并左右滑动UIView
。它工作正常,但现在如果我的手指在单元格上,我无法在 CollectionView 中上下滚动。有没有办法让PanGestureRecognizer
将垂直滚动传递给UICollectionView
?
我正在尝试复制在 Reeder.app for ios 中看到的滑动。
【问题讨论】:
您好,您能否验证所提出的解决方案是否有效?它似乎适用于其他用户。谢谢! 【参考方案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: 中创建单元格时设置委托很方便以上是关于在 UICollectionViewCell 中滑动 UIView 会阻止滚动功能的主要内容,如果未能解决你的问题,请参考以下文章