UIPanGestureRecognizer和UITapGestureRecognizer同时出现

时间:2012-06-10 15:03:37

标签: ios xcode cocos2d-iphone uitapgesturerecognizer uipangesturerecognizer

这是我的小情况。我正在用uipanGesture移动一个ccsprite。我可以将它全部移动而不是问题,我在屏幕上有一个可以用uitapgesture拍摄的地方。

-(void)handleTap:(UITapGestureRecognizer *)recognizer{

CGPoint location = [recognizer locationInView:recognizer.view];
location = [[CCDirector sharedDirector]convertToGL:location];
location = [self convertToNodeSpace:location];

if (location.x > winSize.width * .6 && location.y <winSize.height/2) {
  NSLog(@"fire");  
}

我添加了委托方法,所以当我平移时,我可以点击开火按钮:一切正常。

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

但是当我没有平移并且只是使用uitapgesture进行射击时,我无法平移当我开火时...我认为它发生的原因是因为它正在注册最后一次点击 recognizer.state == UIGestureRecognizerStateBegan因为我没有平移。

任何人都知道我可以点击的方式,而不是将点击注册为if (recognizer.state == UIGestureRecognizerStateBegan

我试过(location.x < winSize.width/2),但它没有用。

2 个答案:

答案 0 :(得分:1)

您可能需要使用requireGestureRecognizerToFail设置手势识别器链。这将意味着正在执行的手势将被强制失败,优先于第二个手势。

所以我想你想要[requireGestureToFail:]。

答案 1 :(得分:0)

我不知道是否有人对这篇文章感兴趣,但我确实解决了90%的问题 使用以下

  for(int i=0; i<[recognizer numberOfTouches]; i++){
    CGPoint pt = [recognizer locationOfTouch:i inView:recognizer.view];
    pt = [[CCDirector sharedDirector]convertToGL:pt];
    pt = [self convertToNodeSpace:pt];

   if (i==0) {
   //stuff
     }