MPMoviePlayerViewController Habilita el modo horizontal

Estoy agregando un MPMoviePlayerViewController a mi aplicación así:

MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc] initWithContentURL:movieURL];; [self presentMoviePlayerViewControllerAnimated:vc]; 

Todo está funcionando, pero no puedo habilitar el modo horizontal. Quiero que mi aplicación entera excepto el MPMoviePlayerViewController real sea retrato. Busqué en Google, pero todas las soluciones requieren que el rest de la aplicación también esté en el paisaje. Necesito que mi aplicación permanezca en Portrait, excepto en el MPMoviePlayerViewController.

¡Gracias por adelantado!

EDITAR:

Usando la respuesta @matt agregué el paisaje a mi orientación del dispositivo:

introduzca la descripción de la imagen aquí

Luego fui a mi primer controller de vista (no al MPMoviePlayerViewController) y agregué:

 -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } 

Sin embargo, la aplicación todavía deja que el menu principal vaya al modo horizontal.

De hecho, hay una manera de hacer que el paisaje de Movie Player sin afectar la vista vertical del rest de pantallas.

 #define degreesToRadian(x) (M_PI * (x) / 180.0) MPMoviePlayerViewController *moviePlayerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:@"http://someurl.com"]]; moviePlayerVC.view.transform = CGAffineTransformIdentity; moviePlayerVC.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); [self presentViewController:moviePlayerVC animated:NO completion:NULL]; 

Asegúrese de que está utilizando MPMoviePlayerViewController y no MPMoviePlayerController , de lo contrario no funcionará.

El problema es que MPMoviePlayerViewController no es su class, por lo que no tiene control sobre su respuesta a supportedInterfaceOrientations , que es lo que usaría para dictar la orientación de la vista presentada si esta fuera su propia class de controller de vista. Entonces debes convertirlo en tu propia class de controller de vista. Tendrá que crear su propia subclass MPMoviePlayerViewController para poder anular SupportInterfaceOrientations supportedInterfaceOrientations y express qué orientación desea (es decir, paisaje). Cree y presente una instancia de esa subclass, no la superclass incorporada.

Para Xcode 6.4, Swift 1.2 editó @Chandresh Panchasara respondió un poco.

 let movieC = MPMoviePlayerViewController() movieC.moviePlayer.contentURL = self.movieURL movieC.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext movieC.view.transform = CGAffineTransformIdentity; movieC.view.transform = CGAffineTransformMakeRotation(CGFloat((M_PI * (90.0) / 180.0))); self.view.window?.rootViewController?.addChildViewController(self) self.presentMoviePlayerViewControllerAnimated(movieC) 

La mejor manera hasta ahora es implementar esta function de AppDelegate y verificar si el rootViewController tiene un hijo del tipo AVPlayerViewController entonces devuelve [.portrait, .landscapeLeft, .landscapeRight] y, de lo contrario, .portrait .

 func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { if let _ = UIApplication.shanetworking.keyWindow?.rootViewController?.childViewControllers.first as? AVPlayerViewController { return [.portrait, .landscapeLeft, .landscapeRight] } return .portrait } 

Debe verificar la keyWindow de UIApplication porque apple presenta este viewController en otra UIWindow así que si intenta hacer esa comprobación en la window que se declara en AppDelegate esto no funcionará, así que tenga cuidado.