将ViewController作为叠加层嵌入AVPlayerController中

我的问题:我正在尝试将ViewController(带有图像和按钮)嵌入到AVPlayerController中,类似于YouTube在其视频上展示广告的方式(位于视频,并将保留在那里)。

我的方法:我有以下测试代码

let AVPC = AVPlayerViewController()
            avpc!.player = self.contentPlayer
            avpc!.view.frame = f
            self.addChild(avpc!)
let adView = UIView()
adView.frame = CGRect(x: ??,y: ??,width: 300,height: 70)
AVPC.contentOverlayView.addSubview(adView)

结果:将视图最小化后,我的视图将正确计算AVPlayerController的大小。但是,当我进入全屏视图时,它将超出范围或根本无法工作。

模拟

将ViewController作为叠加层嵌入AVPlayerController中

solanum 回答:将ViewController作为叠加层嵌入AVPlayerController中

您应该看上去autolayout,并且有一些用于自动布局的工具,它们的代码更少,例如SnapKit

这是无需任何库即可处理的示例方法。

class ViewController: UIViewController {

    let adView: UIView = {
        let view = UIView()
        view.backgroundColor = .red
        return view
    }()

    func playVideo() {
        let videoURL = URL(string: "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
        let player = AVPlayer(url: videoURL!)
        let playerViewController = AVPlayerViewController()
        playerViewController.player = player
        playerViewController.contentOverlayView?.addSubview(adView)

        adView.translatesAutoresizingMaskIntoConstraints = false
        adView.heightAnchor.constraint(equalToConstant: 100).isActive = true
        adView.bottomAnchor.constraint(equalTo: adView.superview!.bottomAnchor,constant: -20).isActive = true
        adView.leadingAnchor.constraint(equalTo: adView.superview!.leadingAnchor,constant: 40).isActive = true
        adView.trailingAnchor.constraint(equalTo: adView.superview!.trailingAnchor,constant: -40).isActive = true

        self.present(playerViewController,animated: true) {
            playerViewController.player!.play()
        }
    }
}

enter image description here enter image description here

本文链接:https://www.f2er.com/2609401.html

大家都在问