0
votes

Comment puis-je montrer à Avplayerlayer en tant qu'allscreen?

Un composant de contrôleur de vue est ajouté dans la fenêtre principale.storyboard.

Entrez la description de l'image ici p>

Affichage comme: iPhone8 code> option est Sélectionné dans la fenêtre principale.storyboard P>

 Entrez la description de l'image ici p>

TestViewController.Swift code> est créé et il est apparu comme étant une référence: p>

 Entrez la description de l'image ici p>

uIView code> est ajouté p>

entrez Description de l'image ici p>

Les contraintes sont ajoutées pour le uIView code> co mponent: p>

 Entrez la description de l'image ici p>

UIView code> La couleur de fond est modifiée: p>

Entrer la description de l'image ici p>

sortie est créé pour le uiview code>: p>

 Entrez la description de l'image ici A> p>

et ensuite sous les codes est écrit dans TestViewController.swift Fichier P>

import UIKit
import AVFoundation
import AVKit

class TestViewController: UIViewController {

private var player: AVPlayer!
@IBOutlet weak var videoUiViewOutlet: UIView!

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

private func setupView()
{
    let path  = URL(fileURLWithPath: Bundle.main.path(forResource: "clouds", ofType: "mp4")!)
    let player = AVPlayer(url: path)
    self.player = player
    let newLayer = AVPlayerLayer(player: player)
    newLayer.frame = self.videoUiViewOutlet.frame
    self.videoUiViewOutlet.layer.addSublayer(newLayer)
    newLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill

    player.play()

    player.actionAtItemEnd = AVPlayer.ActionAtItemEnd.none

    NotificationCenter.default.addObserver(self, selector: #selector(self.videoDidPlayToEnd(notification:)),
                                           name: NSNotification.Name(rawValue: "AVPlayerItemDidPlayToEndTimeNotification"), object: player.currentItem)

    NotificationCenter.default.addObserver(self, selector: #selector(enteredBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(enteredForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
}

@objc func videoDidPlayToEnd(notification: Notification)
{
    let player: AVPlayerItem = notification.object as! AVPlayerItem
    player.seek(to: .zero, completionHandler: nil)
}

@objc func enteredBackground() {
    player.pause()
}

@objc func enteredForeground() {
    player.play()
}
}


1 commentaires

S'il vous plaît laissez-moi savoir si vous ne pouvez pas voir les images que j'ai attachées.


3 Réponses :


1
votes

Vous devez définir image code> INTÉRIEX VIEWDIDLAYOUTOUTOUVESUVIEWS CODE> Où Correction Louches CODE> Existe

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    newLayer.frame = self.videoUiViewOutlet.bounds 
}


0 commentaires

0
votes

Plutôt que d'avoir votre videouiviewoutlet en tant que UIView et créez manuellement le Avplayerlayer Vous pouvez avoir une sous-classe qui remplace coucheClass : Xxx

en utilisant ceci, vous n'aurez pas à gérer le cadre.

Référence


0 commentaires

1
votes

Souhaitez-vous essayer ceci xxx

au lieu de xxx


0 commentaires