Затенение экрана при выполнении жеста Pinch на MPMoviePlayerController - PullRequest
6 голосов
/ 18 августа 2010

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

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

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

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

Ответы [ 4 ]

9 голосов
/ 16 октября 2010

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;
            }
        }
    }
}

2 голосов
/ 23 апреля 2012

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

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

...

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

...

Теперь мои ножки не разбивают мое приложение.

0 голосов
/ 10 апреля 2012

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

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

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

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

Обходной путь:

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

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

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

0 голосов
/ 18 сентября 2010

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

...