1

我在UICollectionViewCellUIView上使用UIPanGestureRecognizer。我正在使用translationInView方法获取沿X轴的平移并向左和向右滑动UIView。它工作正常,但现在我无法在CollectionView中上下滚动,如果我的手指在单元格上。有没有办法让PanGestureRecognizer通过垂直滚动到UICollectionView在UICollectionViewCell中滑动UIView会阻止滚动功能

我想复制在iOS的Reeder.app中看到的滑动。

+0

你好,你可以验证解决方案建议是否工作?它似乎适用于其他用户。谢谢! – batkru 2014-11-24 04:29:49

回答

8

一旦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; 

} 

希望这是有帮助的。

+0

完美的作品!谢谢 – n8tr 2014-07-09 00:07:15

+0

解决了我的问题,谢谢! – 2014-08-14 16:58:33

+0

这很好。我需要将其更改为“velocityInView:self.view”以在我的视图控制器中工作。此外,由于这是针对UICollectionViewCell上的平移手势,因此在collectionView中创建单元格时设置委托很方便:cellForItemAtIndexPath: – Indi 2014-11-21 02:36:01