2016-04-04 7 views
0

Ich muss am Ende meines Spiels ein kurzes Video abspielen.Größe für Video einstellen mit AVPlayerViewController

Ich habe einen AVPlayerViewController auf meinem Storyboard mit einer modalen Präsentation erstellt, die einen Übergang vom vorherigen View Controller verwendet.

Allerdings möchte ich das Video NICHT den gesamten Bildschirm abdecken. Sagen wir 50% (zentriert) der Bildschirmgröße. Hier

ist der Code, den ich versucht:

import AVKit 
import AVFoundation 
import UIKit 

class VideoPlayerViewController: AVPlayerViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

override func viewDidAppear(animated: Bool) { 
    // Play video 
    player?.play() 
} 

override func viewDidLayoutSubviews() { 
    print(videoBounds) 
    self.view.bounds = videoBounds 
} 

}

Das Problem ist, dass die Video Skalen auf den gesamten Bildschirm sehr klein ist (wie etwas um 100 * 70 Pixel). Ich glaube, die Standardgröße ist irgendwann 100 * 100 und es skaliert es passend zu meinem Video-Verhältnis.

Wenn ich keine Grenzen festlege, skaliert es auf den ganzen Bildschirm (Video Schwerkraft lässt mich nicht die Wahl).

Wenn ich die Größe meiner gesamten Ansicht in viewDidLayoutSubviews reduziere, ist es immer noch nicht in Ordnung, weil diese Methode mehrmals aufgerufen wird, damit ich meine Ansichtsgrenzen ändern kann.

ich kann nicht glauben, wie schwer es ein lokales Video auf einem Teil des Bildschirms mit AVPlayerViewController ...

Jede Hilfe angezeigt ist?

Antwort

-2

AVPlayerViewController ist nur für die Verwendung im Vollbildmodus gedacht, Sie verwenden besser AVPlayerLayer, damit Sie die Größe in einer Ansicht Ihrer Wahl anpassen können.

let player = AVPlayer(url: myURL) 
let layer = AVPlayerLayer(player: player) 
layer.frame.size = CGSize(100,100) 
layer.frame.origin = myView.center 

player.play() 
+0

Ich habe keine Apple-Dokumentation gesehen, die darauf hinweist, dass dies der Fall ist - fügen Sie einen Link zur Dokumentation hinzu, wenn Sie einen haben. – Rupert

0

Sie können den View-Controller beliebig skalieren. Wie dies wollten, wenn Sie:

let videoURL = URL(fileURLWithPath: videoPath) 
let player = AVPlayer(url: videoURL) 
let playerViewController = AVPlayerViewController() 
playerViewController.view.frame = CGRect (x:100, y:100, width:200, height:100) 
playerViewController.player = player 

self.addChildViewController(playerViewController) 
self.view.addSubview(playerViewController.view) 
playerViewController.didMove(toParentViewController: self) 

(offensichtlich, die über Größe wäre seltsam, aber Sie können, wenn Sie wollen.).

Verwenden Sie den ViewController, wenn Sie Player-Steuerelemente automatisch verwalten möchten. Wenn Sie Ihre eigenen Steuerelemente rollen möchten, ist die Ebene wahrscheinlich besser.

Wenn Sie dies nur posten, um die Antwort zu korrigieren, die darauf hinweist, dass Sie den VC nur im Vollbildmodus verwenden sollten. Scheint gut für mich zu funktionieren.