2016-02-27 30 views
12

Ho un controllore UIView, che contiene un AVPlayerViewController con AVPlayer. Voglio abilitare la rotazione per AVPlayerViewController (quando il video è a schermo intero) e disabilitare qualsiasi rotazione per UIViewController. Come posso abilitare la rotazione solo per i video (a schermo intero) nella mia app?iOS: AVPlayerViewController abilita la rotazione a schermo intero nell'applicazione con orientamento verticale

+0

Avete implementato 'supportedInterfaceOrientations' in modo appropriato? – matt

+0

@matt Ho appena restituito UIInterfaceOrientationMaskPortrait nel metodo supportatoInterfaceOrientations. UIViewController non ruota e AVPlayer a. – ton252

risposta

11

Swift 2.2 In AppDelegate per consentire la rotazione per il giocatore:

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 
    } 

che creare e utilizzare sottoclasse di AVPlayerViewController per tornare a modalità verticale quando la modalità a schermo intero giocatore uscita :

class YourVideoPlayer: AVPlayerViewController { 

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

Fantastico! Dove hai trovato le informazioni su avplayer? –

0

È necessario abilitare le rotazioni consentite a livello di progetto e quindi limitare la rotazione su tutti i controllori di vista che NON si desidera ruotare. Ad esempio, se hai 5 viewControllers, dovrai limitare la rotazione su 4 di essi e consentire solo la rotazione sul Player Controller. Si può vedere di più su questo qui Handling autorotation for one view controller in iOS7

0

Per me è stato meglio. Basta estendere AVPlayerViewController:

import AVKit 
import UIKit 

class AVPlayerViewControllerRotatable: AVPlayerViewController { 

    override var shouldAutorotate: Bool { 
     return true 
    } 

} 

Swift 4