2016-09-15 34 views
5

Szukam sposobu na wymuszenie, aby odtwarzacz AV (wideo) wyświetlał się tylko w trybie poziomym (przycisk home po lewej). czy to możliwe?Jak wymusić tryb pejzażu w AVPlayer?

EDIT: Próba dodać playerViewController.supportedInterfaceOrientations = .landscapeLeft

Got komunikat "Nie można przypisać właściwości: 'supportedInterfaceOrientations' to get-only property"

import AVKit 
import AVFoundation 

UIViewController { 
    var videoPlayer = AVPlayer() 
    var playerViewController = AVPlayerViewController() 

    override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    play() 
} 

func play() { 
    playerViewController.supportedInterfaceOrientations = .landscapeLeft 
    let moviePath = Bundle.main.path(forResource: "full video", ofType: "mov") 
    if let path = moviePath { 
     let url = NSURL.fileURL(withPath: path) 
     let videoPlayer = AVPlayer(url: url) 
     let playerViewController = AVPlayerViewController() 
     playerViewController.player = videoPlayer 
     self.present(playerViewController, animated: true) { 
      if let validPlayer = playerViewController.player { 
       validPlayer.play() 
       playerViewController.showsPlaybackControls = false 

       } 
      } 
     } 
    } 
} 

EDIT: Próba dodać nową podklasę AVPlayerViewController

import UIKit 
import AVFoundation 
import AVKit 

class LandscapeVideoControllerViewController: AVPlayerViewController { 

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
    return .landscapeLeft 
} 

}

ale coraz komunikat o błędzie „Metoda nie zastępuje żadnej metody z nadklasy”

Odpowiedz

14

Jeśli używasz AVPlayerViewController zaprezentować film powinien być w stanie korzystać z dziedziczone obsługiwane iterface orientacje właściwości kontrolera widoku, tak:

let vc = AVPlayerViewController() 
vc.supportedInterfaceOrientations = .landscapeRight 
// other configs and code to present VC 

nie miałem okazję przetestować ten, ale to powinno działać, spróbować i jeśli jakiekolwiek problemy proszę umieszczać kodu masz i będę mieć wygląd i zaktualizuj odpowiedź.

EDYCJA: Taytee zwrócił uwagę, że jest to właściwość tylko do odczytu.

Powinieneś być w stanie realizować je poprzez rozszerzenie AVPlayerController i przesłanianie obsługiwane właściwości orientacji Tworzenie tej klasy w oddzielnym pliku:

import AVKit 

class LandscapeAVPlayerController: AVPlayerViewController { 

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
     return .landscapeLeft 
    } 
} 

a następnie w kodzie powyżej, można zmienić klasa używany jak

var playerViewController = LandscapeAVPlayerController() 

Uwaga 1: W kodzie powyżej tworzysz dwie instancje AVPlayerController, nie trzeba drugi.

UWAGA 2: Wiele z metod konfiguracyjnych związanych normalnie zastępują w Swift są teraz właściwości w Swift 3, więc zamiast przesłanianie metody, by zastąpić „getter” dla właściwości

+0

próbował dodać dziedziczone Obsługiwana właściwość orientacji interfejsu i otrzymała komunikat o błędzie "Nie można przypisać do właściwości:" supportedInterfaceOrientations "jest właściwością tylko do uzyskania" - wszelkie pomysły? –

+0

ah tak, powinienem pamiętać, że przepraszam. Zaktualizowałem odpowiedź: – Scriptable

+0

zredagowałem moje pytanie- stworzyłem nowy plik SWIFT i dodałem zastąpienie, ale z tym otrzymuję komunikat "Metoda nie zastępuje żadnej metody ze swojej nadklasy" i jeśli usunę nadpisanie, otrzymuję "Metoda supportedInterfaceOrientations() z selektorem obiektywu" supportedInterfaceOrientations "konflikty z getter dla" supportedInterfaceOrientations z nadklasy "UIViewController" z tym samym selektorem celu-c "- wszelkie pomysły? –