iPhone - 与多个UIGestureRecognizer发生冲突

时间:2010-10-26 18:51:29

标签: iphone objective-c uiview uigesturerecognizer

我目前与UIGestureRecognizers存在一些冲突,这些冲突导致一切都很好。我在屏幕上有几个正方形(UIView)让用户平移和捏(用于缩放视图)。我在主视图中添加了一个UIPinchGestureRecognizer,其中添加了正方形,以便我可以在焦点上缩放正方形。我还为每个方块添加了UIPanGestureRecognizers,以便它可以在屏幕中移动。当我的手指在其他方向上移动时,当我捏住缩放选定的方格时,问题就会出现。根据我的调试,似乎如果我的捏手指穿过非聚焦方块,他们就会吃掉可以抵消捏合手势的触摸。使用“[pan requireGestureRecognizerToFail:pinch]”给出夹点优先级但创建和发出,因为连续的声相识别器不再触发。我还尝试将UIPinchRecognizer直接添加到正方形但是可以工作,但是手势有限制在正方形的范围内,如果正方形缩小太多则不能正常工作。有没有解决的办法?我错过了什么?

1 个答案:

答案 0 :(得分:3)

解决问题的一种方法是为所有UIGestureRecognizer设置一个公共委托(可能是此视图的UIViewController)。如果捏手势识别器处于“开始”或“已更改”状态(意味着它正在识别并处理捏合),该委托可以为gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer返回NO。这应该可以防止任何平移手势识别器在捏合手势期间进行触摸。

在界面文件中,您需要保存对捏合手势识别器的引用:

@interface MyViewController : UIViewController <UIGestureRecognizerDelegate> {
  UIGestureRecognizer *pinchGestureRecognizer;
}

在实现中,请确保检查捏手势识别器的状态,而不是手势识别器的状态:

@implementation MyViewController

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
  if(pinchGestureRecognizer.state == UIGestureRecognizerStateBegan ||
     pinchGestureRecognizer.state == UIGestureRecognizerStateChanged) 
  {
    return NO;
  }
  else
  {
    return YES;
  }
}