Как захватить только один щелчок / нажатие на представление MPMoviePlayerController, когда элементы управления скрыты? - PullRequest
4 голосов
/ 20 июня 2011

Ранее Я спрашивал о том, как захватить любой сенсорный ввод в представлении MPMoviePlayerController, когда для MPMovieControlStyle установлено значение MPMovieControlStyleNone .Было предложено, чтобы я мог использовать UIGestureRecognizer для этого.

Я могу захватывать двойные касания на экране, используя распознаватель жестов таким образом, но не одиночные касания.Код, который я использовал для этого, выглядит следующим образом:

///**********///
singleTapGestureRecognizer =
    [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleClickOnMediaView:)];
singleTapGestureRecognizer.numberOfTapsRequired = 1;
[self.moviePlayer.view addGestureRecognizer:singleTapGestureRecognizer];
[singleTapGestureRecognizer release];
///**********///

Почему я не могу захватить отдельные касания в представлении MPMoviePlayerController с помощью этого кода?Есть ли что-то особенное в том, как он справляется с одиночными нажатиями?

Ответы [ 2 ]

0 голосов
/ 03 октября 2012

Нет, приведенный выше ответ не сработает, чтобы получить жест одним нажатием, вам нужно реализовать UITapGestureRecognizerDelegate и использовать метод

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

Поскольку для moviePlayer также используется жест касания, для работы необходим наш индивидуальный метод «Только касание выше».

0 голосов
/ 16 июня 2012

Я знаю, что это немного старый вопрос, но вот решение, если кому-то это нужно. Чтобы обрабатывать одинарные и двойные касания в одном и том же виде, распознаватель одного касания должен ждать сбоя распознавателя двойного касания. Примерно так:

UITapGestureRecognizer* doubleTapRecon = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap)];
[doubleTapRecon setNumberOfTapsRequired:2];
[doubleTapRecon setDelegate:self];
[self.view addGestureRecognizer:doubleTapRecon];

UITapGestureRecognizer* singleTapRecon = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap)];
[singleTapRecon setNumberOfTapsRequired:1];
[singleTapRecon requireGestureRecognizerToFail:doubleTapRecon];
[singleTapRecon setDelegate:self];
[self.view addGestureRecognizer:singleTapRecon];

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

...