Вставить ViewController в AVPlayerController в качестве наложения - PullRequest
0 голосов
/ 21 марта 2020

Моя проблема : я пытаюсь встроить 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, когда он сведено к минимуму. Но когда я go в полноэкранном режиме, он либо выходит за границы, либо не работает вообще.

Макет enter image description here

1 Ответ

1 голос
/ 21 марта 2020

Вы должны выглядеть 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

...