Проблемы с UISwipeGestureRecognizer, UITapGestureRecognizer и MPMoviePlayerController :-( - PullRequest
2 голосов
/ 23 ноября 2010

Это полностью меня озадачило!

У меня есть Распознаватель жестов касания для отображения / скрытия меню ...

У меня также есть Распознаватель жестов смахивания для перемещения между экранами влево и вправо...

У меня также есть MPMoviePlayerController для воспроизведения видео на экране.

Я реализую gestureRecognizer:shouldReceiveTouch: и исключаю все UIControls и все, что имеет префикс «MP».

Проблема в том, что всякий раз, когда я провожу пальцем влево и вправо по элементам управления видеоплеера, shouldReceiveTouch замечает только распознаватель жестов касанием, а не размах.Он также корректно отслеживает НЕТ, и, тем не менее, STILL запускает метод смахивания.

Я пытался посмотреть на gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer, но это ДЕЙСТВИТЕЛЬНО смутило меня, потому что оно также содержит UIPanGestureRecognizer ...?

Пожалуйста, помогите, я устала и у меня большой срок ... и я не могу с этим справиться: (

Спасибо всем!

: - Джо

Ответы [ 2 ]

1 голос
/ 26 ноября 2010

Хорошо, я должен извиниться ... Причина, по которой он не получил shouldReceiveTouch сообщений, заключалась в том, что я не назначил его делегата !! Что за наглость Я настраивал делегата для жеста касания, но не для касания. Теперь все работает нормально.

Извини! : -)

1 голос
/ 25 ноября 2010

У меня такая же проблема. Вот что я сделал, чтобы преодолеть проблему. В методах [self doSomething ...] я делаю анимацию, и если анимация заканчивается он устанавливает включенное состояние распознавателя обратно в YES. Помните о том, что вы установили правильный распознаватель обратно на включен! (здесь у меня есть в (влево / вправо), поэтому массив gestRecognizer имеет 2 записи.

- (void)handleSwipeGesture:(UISwipeGestureRecognizer *)recognizer
{
    if (recognizer.state == UIGestureRecognizerStateEnded && recognizer.enabled) {
        recognizer.enabled = NO;
        if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft)
        {
            [self doSomethingInteresting];
        }
        else {
            [self doSomethingElseInteresting];
        }
    }
}
[UIView transitionWithView:self.containerView
          duration:kAnimationDuration
            options:UIViewAnimationOptionTransitionCurlDown
         animations:^{ your animations }
         completion:^(BOOL finished) {
                if (self.containerView.gestureRecognizers.count) {
             ((UISwipeGestureRecognizer *)[self.containerView.gestureRecognizers objectAtIndex:0]).enabled = YES;
} }];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...