【问题标题】:Gesture recognizor on UICollectionView not receiving gesturesUICollectionView 上的手势识别器未接收手势
【发布时间】:2016-03-12 07:12:16
【问题描述】:

我有一个带有垂直滚动集合视图的 ViewController,它占据了整个视图。我希望能够在整个集合视图(不仅仅是单元格)上获得滑动和平移手势,但我无法获得任何手势。我尝试将手势识别器添加到视图和集合视图,但似乎都不起作用。

将手势识别器添加到视图中

self.panEdgeGesture = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
self.panEdgeGesture.delegate = self;
[self.collectionView addGestureRecognizer:self.panEdgeGesture];
[self.panEdgeGesture setEdges:UIRectEdgeRight];

然后我添加了这些功能:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
   shouldReceiveTouch:(UITouch *)touch{

   return YES;
}

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}

- (void)handlePan:(UISwipeGestureRecognizer *)sender 
{
 DebugLog(@"Received pan gesture");
}

集合视图单元格能否阻止手势事件触发?他们自己没有手势。

【问题讨论】:

    标签: ios uigesturerecognizer


    【解决方案1】:

    UIScreenEdgePanGestureRecognizer's Class Reference:

    创建屏幕边缘平移手势识别器后,分配一个 在附加手势之前为边缘属性设置适当的值 识别器到您的视图。您使用此属性来指定从哪个 手势可能开始的边缘。此手势识别器忽略任何 触摸超出第一次触摸。

    所以把你的代码改成:

    self.panEdgeGesture = [[UIScreenEdgePanGestureRecognizer alloc];
    [self.panEdgeGesture setEdges:UIRectEdgeRight];
    initWithTarget:self action:@selector(handlePan:)];
    self.panEdgeGesture.delegate = self;
    [self.collectionView addGestureRecognizer:self.panEdgeGesture];
    

    【讨论】:

    • 感谢您的提示。这是一个重要的注意事项,但不是导致手势失败的问题。我在没有集合视图的空视图控制器上尝试了相同的代码并且它可以工作,所以我试图了解如何将它添加到具有集合视图的视图控制器中。
    • 您必须发布更多代码,因为我可以复制您的代码并使其与 collectionView 一起使用,前提是我进行了我提到的更改。你在哪里设置gestureRecognizer?设置断点以确认它被调用。当您让 UIScreenEdgePanGestureRecognizer 调用它时,您将 sender 输入为 UISwipeGestureRecognizer 很奇怪。
    • 你说得对,它应该已经改变了——以前我有一个滑动手势。事实上,我最终将错误追溯到另一​​个重置集合视图的函数。所以你是对的,代码确实有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多