在UICollectionViewCell中滑动UIView阻止了滚动的能力

Wes*_*ton 2 cocoa-touch objective-c uipangesturerecognizer uicollectionview uicollectionviewcell

我使用的是UIPanGestureRecognizer一个UIView是一个UICollectionViewCell.我正在使用该translationInView方法获得沿X轴的平移并UIView向左和向右滑动.它工作正常,但现在我无法在CollectionView中上下滚动,如果我的手指在单元格上.有没有办法让PanGestureRecognizer传递垂直滚动到UICollectionView

我试图复制在Reeder.app for iOS中看到的滑动.

小智 8

一旦UIPanGestureRecognizer您的UIView触摸中的激活不再通过响应者链转发,因此您UICollectionView不再接收触摸.

您可以尝试将您设置为您UIView的代表,UIPanGestureRecognizer并放置是否UIPanGestureRecognizer应该激活的逻辑.你必须在你的UIView中实现委托的方法:

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;
Run Code Online (Sandbox Code Playgroud)

例如,使用下面的代码,如果视图的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;

}
Run Code Online (Sandbox Code Playgroud)

希望这是有帮助的.