【问题标题】:AVPlayer video is not fitting horizontalAVPlayer 视频不适合水平
【发布时间】:2017-07-24 19:26:05
【问题描述】:

构建我的第一个应用程序并尝试将背景视频水平放置。

下面是我正在使用的代码

override func viewDidLoad()
{
    super.viewDidLoad()

    let URL = Bundle.main.url(forResource: "homedocapp", withExtension: "mp4")

    Player = AVPlayer.init(url: URL!)

    PlayerLayer = AVPlayerLayer(player: Player)
    PlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    PlayerLayer.frame = self.view.frame; PlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    PlayerLayer.zPosition = -1

    Player.actionAtItemEnd = AVPlayerActionAtItemEnd.none

    self.view.layer.addSublayer(PlayerLayer)

    Player.play()

    view.layer.insertSublayer(PlayerLayer, at: 0)

    NotificationCenter.default.addObserver(self, selector: #selector(playerItemReachEnd(notification:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: Player.currentItem)


}

AVPlayer Horizontal display

提前感谢您

【问题讨论】:

    标签: ios swift swift3 xcode8 avplayer


    【解决方案1】:

    当调用 'viewDidLoad' 时,视图仍然可能有不正确的大小。所以你的 PlayerLayer 也会有不正确的大小。尝试将您的代码移动到“viewDidLayoutSubviews”函数:

    override func viewDidLayoutSubviews() 
    {
        super.viewDidLayoutSubviews()
    
        // Set up your player layer instance here
    }
    

    【讨论】:

    • 会的!会让你知道。感谢您的提示
    • 像魅力一样工作。现在当水平旋转时分屏。很快就会上传一张图片
    【解决方案2】:

    在 viewDidLoad 初始化时,您必须使用约束调整播放器的大小,因为此时 self.view.frame 不正确。

    【讨论】:

    • 非常感谢
    【解决方案3】:

    Spilt screen

    旋转时出现分屏。

    class ViewController: UIViewController  {
    
    var Player: AVPlayer!
    var PlayerLayer: AVPlayerLayer!
    
    
    
    override func viewDidLayoutSubviews()
    {
        super.viewDidLayoutSubviews()
    
        let URL = Bundle.main.url(forResource: "homedocapp", withExtension: "mp4")
    
        Player = AVPlayer.init(url: URL!)
    
        PlayerLayer = AVPlayerLayer(player: Player)
        PlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
        PlayerLayer.frame = view.layer.frame
    
        Player.actionAtItemEnd = AVPlayerActionAtItemEnd.none
    
    
        Player.play()
    
        view.layer.insertSublayer(PlayerLayer, at: 0)
    
        NotificationCenter.default.addObserver(self, selector: #selector(playerItemReachEnd(notification:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: Player.currentItem)
    
    
    }
    

    努力学习

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 2021-12-04
      相关资源
      最近更新 更多