2015-04-16 11 views
8

Hey Stackoverflow Members, forse potresti aiutarmi a risolvere il problema.Impossibile ottenere il supporto dell'InterfaceOrientationsForWindow per lavorare con Swift 1.2

Il problema è che voglio bloccare l'orientamento di tutti gli UIViewControllers su "Ritratto", ma se appare il MoviePlayer dovrebbe passare alla modalità orizzontale e viceversa se il lettore video scompare.

Fino Swift 1.2 ho usato:

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow) -> UIInterfaceOrientationMask { 
//If the video is being presented, let the user change orientation, otherwise don't. 
if let presentedViewController = window.rootViewController?.presentedViewController? { 
    if (presentedViewController.isKindOfClass(MPMoviePlayerViewController) && !presentedViewController.isBeingDismissed()) { 
     return .AllButUpsideDown 
    } 
} 
return .Portrait 
} 

Con Swift 1.2 alcune cose sono cambiate e così ho finito con il seguente codice:

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int { 
    //If the video is being presented, let the user change orientation, otherwise don't. 
    if let presentedViewController = window?.rootViewController?.presentedViewController { 
     if (presentedViewController.isKindOfClass(MPMoviePlayerViewController) && !presentedViewController.isBeingDismissed()) { 
      return Int(UIInterfaceOrientationMask.AllButUpsideDown.rawValue) 
     } 
    } 
    return Int(UIInterfaceOrientationMask.Portrait.rawValue) 
} 

Ma il mio codice non funziona, il film Player (XCDYoutube) è bloccato in modalità verticale. Orientamento del dispositivo Le impostazioni dovrebbero andare bene!

Grazie in anticipo per il vostro aiuto!

+0

ho due suggerimenti rapidi: 1. Assicurarsi che il file Info.plist per il progetto non contenga una chiave per l'orientamento dell'interfaccia supportata che escluda le modalità orizzontale. 2. Impostare un punto di interruzione nella prima riga di istruzione "if" nella funzione supportataInterfaceOrientationsForWindow e quindi fare un solo passaggio attraverso il codice per vedere cosa sta succedendo. – dean

+0

in seguito ai commenti di deanware: sei sicuro di aver raggiunto il punto di interruzione? Stai restituendo un int/not UIInterfaceOrientationMask. Hai provato l'aggiornamento a swift 1.2 opzione di menu? – johndpope

+0

Ho appena provato in un nuovo progetto il tuo codice Swift 1.2 e funziona perfettamente. L'app ruota solo quando viene presentato MoviePlayer. Probabilmente hai un altro problema. Forse XCDYoutube non sta giocando bene con iOS 8 e non sta girando più? Prova a tornare a Tutti gli orientamenti per vedere se il giradischi ruota. – pteofil

risposta

3

Ho avuto una logica simile alla tua ma ho finito per restituire il supporto per tutti gli orientamenti.

return UIInterfaceOrientationMaskAll in appdelegate.

A seconda del numero di controller di visualizzazione disponibili, è possibile creare una sottoclasse astratta di UIViewController e restituire solo il supporto per Portrait/e quindi modificare il controller della vista di YouTube per supportare panorama.

  • (NSUInteger) supportedInterfaceOrientations { ritorno UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight; }
1

Ho appena avuto lo stesso identico problema. Ho trovato un modo per risolvere il problema raggiungendo la cima della pila regolatore:

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int { 
    //If the video is being presented, let the user change orientation, otherwise don't. 
    if var presentedViewController = window?.rootViewController?.presentedViewController { 
     // Get the controller on the top of the stack 
     while (presentedViewController.presentedViewController) != nil { 
      presentedViewController = presentedViewController.presentedViewController! 
     } 

     if (presentedViewController.isKindOfClass(MPMoviePlayerViewController) && !presentedViewController.isBeingDismissed()) { 
      return Int(UIInterfaceOrientationMask.AllButUpsideDown.rawValue) 
     } 
    } 
    return Int(UIInterfaceOrientationMask.Portrait.rawValue) 
} 

Si può anche provare a visualizzare il tipo di presentedViewController per essere sicuro che sia quella giusta:

println("presentedViewController type: \(presentedViewController.dynamicType)") 
Problemi correlati