UIGestureRecognizer и UIControlEventTouchUpInside работают одновременно

Я добавляю UITapGestureRecognizer в свое приложение для обнаружения жеста двойного нажатия.

UITapGestureRecognizer *tapgr = [[UITapGestureRecognizer alloc]
                                        initWithTarget:self action:@selector(handleTapGesture:)];
  tapgr.numberOfTaps = 2;
  tapgr.delegate = self;
  [_view addGestureRecognizer:tapgr];
  [tapgr release];

Это работает нормально, если я не покажу всплывающую подсказку в своем приложении. Они устроены так:

[_view.toolTipView addTarget:self action:@selector(handleTap:) forControlEvents:UIControlEventTouchUpInside];

До появления моего распознавателя жестов эти всплывающие подсказки были интерактивными и реагировали, теперь они больше не реагируют...

Как заставить распознаватель жестов и стандартный UIControlEventTouchUpInside-Setup работать вместе?


person Sebastian Oberste-Vorth    schedule 21.06.2013    source источник
comment
См. документацию developer.apple.com/ library/ios/#documentation/uikit/reference/ в разделе Отмена и задержка касаний   -  person borrrden    schedule 21.06.2013
comment
извините, не помогает... Я уже установил для cancelsTouchesInView значение NO   -  person Sebastian Oberste-Vorth    schedule 21.06.2013


Ответы (3)


Я нашел решение:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
 if (gestureRecognizer == tapgr) {
   return ![touch.view isKindOfClass:[UIControl class]];
 }
 return YES;
}

Этот метод предотвращает запуск GestureRecognizer при нажатии UIControl (т.е. кнопки).

person Sebastian Oberste-Vorth    schedule 21.06.2013

если вы хотите, чтобы _view мог реагировать на одно касание и двойное касание вместе, вы можете попробовать это

   UITapGestureRecognizer * singleTap    = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
   UITapGestureRecognizer * doubleTap    = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];

   [doubleTap setNumberOfTapsRequired:2];

   //Add this code to disable double tap and only responds to single tap when user tap the _view just once time
   [singleTap requireGestureRecognizerToFail:doubleTap]; 

   [self addGestureRecognizer:doubleTap];
   [self addGestureRecognizer:singleTap];
   [singleTap release];
   [doubleTap release];

если вы хотите использовать TouchEvent, попробуйте UIControlEventTouchDownRepeat

  [button addTarget:self actionselector(multipleTap:withEvent:) forControlEvents:UIControlEventTouchDownRepeat];


  //Try to check wheather is doulbe tap or single tap.

  -(IBAction)multipleTap:(id)sender withEvent:(UIEvent*)event {

     UITouch* touch = [[event allTouches] anyObject];

     if (touch.tapCount == 2) {

     // do action.

     }

  }
person Nathan Ou    schedule 21.06.2013

Вы не можете этого сделать. Я думаю, вы должны выбрать другой способ реализовать это.

person Nguyen Thi Thuy Trang    schedule 21.06.2013