2016-02-27 32 views
12

Mam UIViewcontroller, który zawiera AVPlayerViewController z AVPlayer. Chcę włączyć obrót dla AVPlayerViewController (gdy wideo jest na pełnym ekranie) i wyłączyć wszelkie obracanie dla UIViewController. Jak włączyć rotację tylko w przypadku filmów wideo (na pełnym ekranie) w mojej aplikacji?iOS: AVPlayerViewController umożliwia pełny obrót w orientacji pionowej aplikacji

+0

Czy realizowane 'supportedInterfaceOrientations' odpowiednio? – matt

+0

@matt Właśnie zwracam UIInterfaceOrientationMaskPortrait w supportedInterfaceOrientations method. UIViewController nie obraca się i AVPlayer do. – ton252

Odpowiedz

11

Swift 2.2 W AppDelegate aby umożliwić obrót dla gracza:

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask { 
     guard let vc = (window?.rootViewController?.presentedViewController) else { 
      return .Portrait 
     } 

     if (vc.isKindOfClass(NSClassFromString("AVFullScreenViewController")!)) { 
      return .AllButUpsideDown 
     } 

     return .Portrait 
    } 

nie tworzyć i używać podklasę AVPlayerViewController do tyłu w tryb portretu, gdy tryb wyjście gracz pełnoekranowym :

class YourVideoPlayer: AVPlayerViewController { 

    override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 
     if view.bounds == contentOverlayView?.bounds { 
UIDevice.currentDevice().setValue(UIInterfaceOrientation.Portrait.rawValue, forKey: "orientation") 
     } 
    } 
+1

Awesome! Gdzie znalazłeś informacje o avplayerze? –

0

Musisz włączyć dopuszczalne obroty na poziomie projektu, a następnie ograniczyć obrót we wszystkich kontrolerach widoku, których NIE chcesz obracać. np. jeśli masz 5 kontrolerów widoku, musisz ograniczyć rotację na 4 z nich i zezwalać tylko na obrót na kontrolerze odtwarzacza. Można zobaczyć więcej na ten temat tutaj Handling autorotation for one view controller in iOS7

0

Dla mnie to było lepsze. Wystarczy przedłużyć AVPlayerViewController:

import AVKit 
import UIKit 

class AVPlayerViewControllerRotatable: AVPlayerViewController { 

    override var shouldAutorotate: Bool { 
     return true 
    } 

} 

Swift 4