iPhone — Objective C — воспроизведение видео в полноэкранном режиме в ландшафтном режиме

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

Я пишу приложение IOS, которое начинается с панели вкладок, каждая вкладка View Controller имеет встроенный контроллер навигации. Я могу транслировать видео и воспроизводить его с помощью AVPlayerViewController, но не могу заставить его запускаться в ландшафтном режиме (даже если телефон находится в портретном режиме. Если я переверну телефон, он станет полноэкранным как ландшафтный режим.

Вот раздел кода, который у меня есть, который транслирует видео:

-(void) startPlayback {

  NSURL *streamURL = [NSURL URLWithString: pathToVideoStream];

  NSLog(@"Entered %s - Will now try to play video at NSURL: %@",__PRETTY_FUNCTION__, streamURL );

  AVPlayerViewController *moviePlayer = [[AVPlayerViewController alloc] init];
  moviePlayer.player = [AVPlayer playerWithURL:streamURL];
  [self presentViewController:moviePlayer animated:YES completion:nil];
  moviePlayer.view.frame = self.view.frame;
  [moviePlayer.player play];

}

Я добавил предложения из этого сообщения: lock-i">Воспроизвести видео в альбомной ориентации, когда все приложение в портретной ориентации

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


person Curious101    schedule 30.04.2018    source источник


Ответы (1)


Я нашел решение этого.

Я создал подкласс AVPlayerViewController и назвал его LandscapeAVPlayerViewController. В реализации подкласса я переопределил два метода:

-(UIInterfaceOrientationMask)supportedInterfaceOrientations{

   [super supportedInterfaceOrientations];
   return UIInterfaceOrientationMaskLandscape; // allows Left and Right both
}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
    return UIInterfaceOrientationLandscapeRight;   // prefers Right in portrait mode
}

А затем, вернувшись в метод startPlayback, я изменил код на:

-(void) startPlayback {

   NSURL *streamURL = [NSURL URLWithString: pathToVideoStream];

   LandscapeAVPlayerViewController *landscapeMoviePlayerVC =  [[LandscapeAVPlayerViewController alloc] init];

   landscapeMoviePlayerVC.player = [AVPlayer playerWithURL:streamURL];

   [self presentViewController:landscapeMoviePlayerVC animated:YES completion:nil];
   [landscapeMoviePlayerVC.player play];

}

Это все, что мне нужно было сделать.

person Curious101    schedule 30.04.2018