Отключение экрана при выполнении жестов сжатия на MPMoviePlayerController

У меня есть эта странная проблема в iOS4, когда видео, которое воспроизводится в MPMoviePlayerController, затемняется, когда пользователь выполняет определенные жесты над экраном. Я просто создаю UIViewController и объект для MPMoviePlayerController, а затем устанавливаю View на UIViewController.

Я хочу спросить, разрешима ли эта проблема и как правильно воспроизводить потоковое видео на iPhone.

И если есть способ, которым я могу использовать наложение на MPMoviePlayerController и захватывать все жесты и передавать одиночные касания или касания на MPMoviePlayerController для общей функциональности MPMoviePlayerController и избегая жестов, вызывающих проблему.

Пожалуйста, помогите мне решить проблему с помощью наилучшего возможного решения и, пожалуйста, помогите мне разработать решение.


person y ramesh rao    schedule 18.08.2010    source источник
comment
Я тоже это видел. Я заметил, что это связано с отправленными событиями ... жест сжатия, как и переключение из встроенного в полноэкранный режим, вероятно, отправляет событие завершения воспроизведения. Я не мог понять почему.   -  person Paul Shapiro    schedule 21.08.2010


Ответы (4)


Apple встроила UIPinchGestureRecognizer в MPMoviePlayerViewController, но его нельзя найти в свойстве UIResponder.gestures. Вы можете отключить UIPinchGestureRecognizer, встроенный в touchesBegan метод MPMoviePlayerViewController.


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    for (UITouch *touch in touches) {
        NSArray *array = touch.gestureRecognizers;
        for (UIGestureRecognizer *gesture in array) {
            if (gesture.enabled && [gesture isMemberOfClass:[UIPinchGestureRecognizer class]]) {
                gesture.enabled = NO;
            }
        }
    }
}

person Jungkuk Choi    schedule 16.10.2010

У меня была аналогичная проблема, и я только что нашел причину своей проблемы в документе Apple:

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

...

[player.view setFrame: myView.bounds]; // рамка плеера должна совпадать с родительской

...

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

person Chris    schedule 23.04.2012

Я увидел эту проблему и нашел простое решение.

Вышеупомянутый трюк с использованием жестов нельзя было использовать, поскольку мы не хотим использовать MPMoviePlayerViewController (у нас есть некоторые настраиваемые элементы управления, когда видео не в полноэкранном режиме, и мы хотели бы сохранить плавный переход).

Симптомы (iOS 5.1):

  • Когда пользователь несколько раз открывал видео в полноэкранном режиме, зажимал его обратно из полноэкранного режима, а затем делал то же самое с новым видео, экран становился черным в пятый раз, когда видео запускалось и переходило в полноэкранный режим.
  • Пока экран затемнен, можно скрыть и отобразить строку состояния одним касанием, но панель видео или навигации не отображается.
  • Используя кнопку «Готово» в полноэкранном режиме вместо зажима, можно было без проблем закрыть полноэкранный режим.
  • На каждое видео выделяем свежий MPMoviePlayerController и ничего не пропускаем. Это не помогло.

Временное решение:

При отклонении представления, в котором было MPMoviePlayerController представление, мы устанавливаем contentURL = nil на плеере.

После этого у нас не возникает проблем с черным экраном на последующих MPMoviePlayerController экземплярах.

Кажется, есть некоторая внутренняя очистка, которая выполняется при использовании кнопки «Готово», но не при нажатии, чтобы закрыть полноэкранный режим.

person Heiberg    schedule 10.04.2012

Ненавижу эту проблему. Что я смог обнаружить, так это то, что для полноэкранного режима необходимо встроенное управление, чтобы NSNotificationCenter отвечал правильным Notification. Звучит глупо и нелепо, но именно это я обнаружил в версии 4.0.

person Community    schedule 17.09.2010