2017-07-24 2 views
0

La vidéo que je joue ne prend pas toute la surface de la UIView (du nom VideoView), qui a une couleur grise: iPhone 7 Plus Simulator ScreenshotAVPlayerLayer ne remplit pas complètement l'UIVIew. Qu'est-ce que je rate?

La plupart des réponses affirment que je dois soit définir le cadre de limites (de UIView) ou définissez videoGravity sur AVLayerVideoGravityResizeAspectFill. J'ai essayé les deux, mais pour une raison quelconque, il ne remplit toujours pas complètement l'espace.

var avPlayer: AVPlayer! 
var avPlayerLayer: AVPlayerLayer! 
var paused: Bool = false 

@IBOutlet weak var videoView: UIView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
    let theURL = Bundle.main.url(forResource:"HOTDOG", withExtension: "mp4") 

    avPlayer = AVPlayer(url: theURL!) 
    avPlayerLayer = AVPlayerLayer(player: avPlayer) 

    avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill 
    avPlayerLayer.frame = videoView.layer.bounds 

    videoView.layer.insertSublayer(avPlayerLayer, at: 0) 
} 

Toute aide sera appréciée. :)

Répondre

1

Après longtemps, j'ai trouvé la réponse.

code ci-dessous doit être déplacé dans viewDidAppear() comme:

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

    // Resizing the frame 
    avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill 
    avPlayerLayer.frame = videoView.layer.bounds 
    videoView.layer.insertSublayer(avPlayerLayer, at: 0) 

    avPlayer.play() 
    paused = false 
} 

La mise en page a été conçu pour iPhone SE (petit écran), alors quand il a été testé sur un plus grand écran de l'application prenait taille initialement fixé à partir de la mise en page automatique et le façonner en fonction de cela. En déplaçant le code dans viewDidAppear(), l'application redimensionne la fenêtre en fonction des nouvelles contraintes.