2016-09-15 1 views
5

Ich suche nach einer Möglichkeit, einen AVplayer (Video) zu zwingen, sich nur im Querformat zu zeigen (Home-Taste auf der linken Seite). Ist das möglich?Wie erzwinge ich den Landscape-Modus im AVPlayer?

EDIT: Versuchte playerViewController.supportedInterfaceOrientations hinzufügen = .landscapeLeft

Got Fehlermeldung "Kann nicht auf Eigenschaft zuweisen: 'supportedInterfaceOrientations' ist ein get-only-Eigenschaft"

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: Versuchte neue Unterklasse von AVPlayerViewController hinzufügen

}

aber immer die Fehlermeldung „Methode überschreiben keine Methode von ihrer Oberklasse“

Antwort

14

Wenn Sie die AVPlayerViewController werden mit dem Video zu präsentieren, sollten Sie die geerbte unterstützt iterface Orientierungen Eigenschaft des View-Controller verwenden können, wie so:

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

habe ich nicht Gelegenheit hatte, dies zu testen, aber es sollte funktionieren, es zu versuchen, und wenn Ihr irgendwelche Probleme mit schreiben Sie bitte den Code, den Sie haben, und ich werde mal schauen und aktualisieren die Antworten.

EDIT: Taytee wies darauf hin, dass dies eine Read-Only-Eigenschaft ist.

Sie sollten in der Lage sein, sie umzusetzen, indem die AVPlayerController erstreckt und Überschreiben der Orientierungseigenschaften unterstützt, diese Klasse in einer separaten Datei erstellen:

import AVKit 

class LandscapeAVPlayerController: AVPlayerViewController { 

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
     return .landscapeLeft 
    } 
} 

und dann oben in Ihrem Code, dann würden Sie das ändern Klasse verwendet wie

var playerViewController = LandscapeAVPlayerController() 

Anmerkung 1: In Ihrem Code über Sie zwei Instanzen von AVPlayerController erstellen, müssen Sie nicht die zweite benötigen.

ANMERKUNG 2: Eine Menge der Config bezogenen Methoden würden Sie normalerweise in Swift außer Kraft gesetzt sind jetzt Eigenschaften in Swift 3, so dass anstelle der Methode der überschreiben, überschreiben Sie die ‚Getter‘ für die Eigenschaft

+0

versucht, die geerbt hinzufügen unterstützte Interface Orientations-Eigenschaft und erhielt die Fehlermeldung "Kann der Eigenschaft nicht zuweisen: 'supportedInterfaceOrientations' ist eine Get-only-Eigenschaft" - irgendwelche Ideen? –

+0

ah ja, ich sollte daran erinnern, dass tut mir leid. Ich habe die Antwort aktualisiert – Scriptable

+0

bearbeitet meine Frage- Ich habe eine neue Swift-Datei erstellt und die Überschreibung hinzugefügt, aber damit bekomme ich Fehler "Methode überschreibt keine Methode aus der Oberklasse" und wenn ich die Überschreibung wegnehmen, bekomme ich "Die Methode supportedInterfaceOrientations() mit objective-c selector" supportedInterfaceOrientations "steht im Konflikt mit getter für 'supportedInterfaceOrientations von der Oberklasse' UIViewController 'mit dem gleichen Ziel-c Selektor" - irgendwelche Ideen? –

Verwandte Themen