Воспроизведение видео в полноэкранном режиме, когда пользователь поворачивается в горизонтальной плоскости, а затем программно поворачивается назад, когда видео останавливается - PullRequest
3 голосов
/ 28 марта 2012

У меня есть требование, когда интерфейс, который содержит видео, является только портретным, но когда пользователь поворачивается в горизонтальной плоскости, видео переходит в полноэкранный режим и начинает воспроизводиться тогда, когда видео подходит к концу или пользователь нажимает кнопку «Готово», видео Выход из полноэкранного режима и интерфейс по-прежнему портретный. Я пытался использовать shouldAutorotateToInterfaceOrientation: методы, которые работают для запуска видео. Но я не могу заставить экран вращаться снова. Вместо этого я решил использовать shouldAutorotateToInterfaceOrientation: и создать свой собственный контроллер представления для обработки только видео и использовать - [UIView setTransform:] для поворота видео, но вращения работают только в том случае, если я отключаю переход к полноэкранному режиму является частью моего кода

- (void)deviceOrientationDidChangeNotification:(NSNotification *)aNotification
{
    switch ([[UIDevice currentDevice] orientation])
    {
    case UIDeviceOrientationPortrait:
    case UIDeviceOrientationPortraitUpsideDown:
        [self setFullscreen:NO animated:YES];
        break;
    case UIDeviceOrientationLandscapeLeft:
    case UIDeviceOrientationLandscapeRight:
        [self.moviePlayerController play];
        [self setFullscreen:YES animated:YES];
        break;
    default:
        break;
    }
}

    - (void)setFullscreen:(BOOL)aFullScreen animated:(BOOL)anAnimated
    {
        if( aFullScreen )
        {
            switch ([[UIDevice currentDevice] orientation])
            {
                case UIDeviceOrientationLandscapeLeft:
                case UIDeviceOrientationPortraitUpsideDown:
                    self.moviePlayerController.view.transform = CGAffineTransformMakeRotation(M_PI_2);
                    break;
                case UIDeviceOrientationPortrait:
                case UIDeviceOrientationLandscapeRight:
                    self.moviePlayerController.view.transform = CGAffineTransformMakeRotation(M_PI+M_PI_2);
                    break;
                default:
                    break;
            }
        }
        else
            self.moviePlayerController.view.transform = CGAffineTransformMakeRotation(0);
        [self.moviePlayerController setFullscreen:aFullScreen animated:anAnimated];     // comment this out and rotation works
    }

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

1 Ответ

3 голосов
/ 28 марта 2012

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

Я надеюсь, что вы можете найти решение в соответствии с предложенными здесь (иС нетерпением жду возможности поучиться у него).В противном случае вы можете сделать то, что я сделал, вырвав полу-победу из челюстей полу-поражения следующим образом:

  • Создать новый контроллер вида только для ландшафта исключительно для воспроизведения фильмов.Он позволяет альбомную ориентацию, просто отвечая beforeAutorotateToInterfaceOrientation:
  • Извлеките весь уродливый код ориентации из VC, над которым вы работаете, и просто добавьтеModalViewController: на новый.(Вы даже можете иметь крутой эффект перехода в виде халявы, например, вертикальный слайд).
  • Загрузка и воспроизведение фильма при просмотре viewDidAppear
  • В виртуальном видео в альбомной ориентации подпишитесь на MPMoviePlayerPlaybackDidFinishNotification при уведомленииdo [self dismissModalViewController: YES];

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

Хорошоудачи.(Я могу предоставить подробный код, если вам это нужно).

...