Аспект заливки AVPlayerLayer, но прикалывать? - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь отобразить простой мов ie в виде. Я хочу, чтобы mov ie расширился, чтобы заполнить ширину вида, и обрезать нижнюю часть (если необходимо), но не верхнюю. Я пробовал несколько различных комбинаций videoGravity и contentMode, но, похоже, ни одна из них не делает то, что я хочу.

Вот мое мнение:

class
AutoPlayerView : UIView
{
    func
    updateLayer()
    {
//      let ar = self.playerLayer.videoRect.width / self.playerLayer.videoRect.height
//      r.origin.y = 0.0
//      self.playerLayer.videoRect = r
        self.playerLayer.bounds = self.bounds
        let r = self.playerLayer.videoRect
    }

    var
    player: AVPlayer?
    {
        get { return self.playerLayer.player }
        set { self.playerLayer.player = newValue }
    }

    var
    playerLayer: AVPlayerLayer
    {
        return self.layer as! AVPlayerLayer
    }

    override
    static
    var
    layerClass: AnyClass
    {
        return AVPlayerLayer.self
    }

    var
    url: URL?
    {
        didSet(inOldVal)
        {
            if inOldVal != self.url
            {
                if let url = self.url
                {
                    self.player = AVPlayer(url: url)
                    self.player?.play()
                    self.playerLayer.videoGravity = .resizeAspectFill

                    self.obs = NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: self.player?.currentItem, queue: .main)
                    { (inNotification) in
                        self.player?.seek(to: .zero)
                        self.player?.play()
                    }
                }
                else
                {
                    if let obs = self.obs { NotificationCenter.default.removeObserver(obs) }
                    self.player = nil
                }
//              updateLayer()
            }
        }
    }

    var obs: Any?
}
...