5

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

4

1 回答 1

3

解决问题的一种方法是为所有 UIGestureRecognizers(可能是该视图的 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;
  }
}
于 2010-10-26T19:30:40.737 回答