2014-12-22 9 views
12

la mia app è un'app solo ritratto, ma ho un controller di visualizzazione che visualizza un flusso live utilizzando un AVPlayerViewController.iOS 8 - cambia orientamento in verticale quando si chiude a schermo intero AVPlayerViewController

Per consentire paesaggio per la visualizzazione a schermo intero di quel giocatore ho scritto questo metodo nel AppDelegate.swift:

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int { 
    var orientation = UIInterfaceOrientationMask.Portrait 

    if let presentedController = window?.rootViewController?.presentedViewController? { 

     if presentedController.isKindOfClass(NSClassFromString("AVFullScreenViewController").self) { 
      orientation = .AllButUpsideDown 
     } else if let navController = presentedController as? UINavigationController { 
      if navController.topViewController.isKindOfClass(NSClassFromString("AVFullScreenViewController").self) { 
       orientation = .AllButUpsideDown 
      } 
     } 
    } 

    return Int(orientation.rawValue) 
} 

Questo è come io chiamo il mio inizializzare AVPlayer:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "showLiveStream" { 

     SVProgressHUD.show() 
     var queue: dispatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) 

     dispatch_async(queue, { 
      let streamURL = NSURL(string: liveStreamURL) 
      let playerItem = AVPlayerItem(URL: streamURL) 
      let player = AVPlayer(playerItem: playerItem) 

      dispatch_async(dispatch_get_main_queue(), { 
       SVProgressHUD.dismiss() 
       var playerViewController = segue.destinationViewController as AVPlayerViewController 
       playerViewController.player = player 
      }) 
     }) 
    } 
} 

Il problema: quando apro la visualizzazione a schermo intero del lettore, quindi cambi in orizzontale e quindi fai clic su "Fine" per chiudere la visualizzazione a schermo intero, la mia app rimane in orizzontale. Ma voglio che ruoti di nuovo in verticale. Come lo posso fare?

+0

Stai creando una sottoclasse di 'AVPlayerViewController' con la classe' AVFullScreenViewController'? –

+0

@LaurentRivard No, la classe 'AVFullScreenViewController' è l'equivalente AVKit della classe di runtime' MPInlineVideoFullscreenViewController'. –

risposta

0

Invece di implementare application(_:supportedInterfaceOrientationsForWindow:) provare a implementare supportedInterfaceOrientations() su ogni controller di visualizzazione. Così, per esempio:

override func supportedInterfaceOrientations() -> Int { 
    return Int(UIInterfaceOrientationMask.Portrait.rawValue) 
} 

Questo farà sì che il controller della vista non può essere visualizzata nel paesaggio, così quando respingendo il lettore video, verrà subito indietro a una finestra ritratto.

Aggiornamento Objective-C:

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; 
} 
+0

Puoi aggiungere l'obiettivo c per questa risposta? – Ibdakine

+1

questo non funziona per me. – LightningStryk

0

aggiungere queste righe a AppDelegate e la tua vista richiesta controller

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    //LandScapeMode:- UIInterfaceOrientationMaskLandscape; 
    //PortraitMode:- 
    return UIInterfaceOrientationMaskPortrait 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    //LandScapeMode:- UIInterfaceOrientationLandscapeRight; 
    // ProtraitMode:- 
    return UIInterfaceOrientationPortrait 
} 
0

quello che ho fatto per risolvere questo problema, creare una nuova classe con una funzione 'viewDidLayoutSubviews' e la sovrascrive!

final class NewMoviePlayerViewController: AVPlayerViewController { 
    override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 

     if view.bounds == contentOverlayView?.bounds { 
      let value = UIInterfaceOrientation.portrait.rawValue 
      UIDevice.current.setValue(value, forKey: "orientation") 
     } 
    } 
} 
Problemi correlati