AVPlayerLayer没有完全填满的UIView。我在想什么?

问题描述 投票:0回答:2

我打不走UIView(名为videoView),其中有一个灰色的整个区域的视频:iPhone 7 Plus Simulator Screenshot

大部分的答案声称我需要任一组所述框架(UIView的)边界或设置videoGravityAVLayerVideoGravityResizeAspectFill。我用尽全力,但由于某种原因它仍然无法完全填补空间。

var avPlayer: AVPlayer!
var avPlayerLayer: AVPlayerLayer!
var paused: Bool = false

@IBOutlet weak var videoView: UIView!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    let theURL = Bundle.main.url(forResource:"HOTDOG", withExtension: "mp4")

    avPlayer = AVPlayer(url: theURL!)
    avPlayerLayer = AVPlayerLayer(player: avPlayer)

    avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    avPlayerLayer.frame = videoView.layer.bounds

    videoView.layer.insertSublayer(avPlayerLayer, at: 0)
}

任何帮助将不胜感激。 :)

swift3 avplayerlayer
2个回答
2
投票

经过很长一段时间我找到了答案。

下面的代码应移入viewDidAppear(),如:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    // Resizing the frame
    avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    avPlayerLayer.frame = videoView.layer.bounds
    videoView.layer.insertSublayer(avPlayerLayer, at: 0)

    avPlayer.play()
    paused = false
}

布局是专为iPhone SE(小屏幕),所以当它被一个更大的屏幕上测试的应用程序是从自动布局以最初设定的大小,并根据该塑造它。由代码移入viewDidAppear()该应用调整大小根据新的约束窗口。


0
投票

只要将帧线avPlayerLayer.frame = videoView.layer.bounds成这样viewDidLayoutSubviews

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    avPlayerLayer.frame = videoView.layer.bounds
}

其余的应该坚持到viewDidLoad功能,就像你一样。

© www.soinside.com 2019 - 2024. All rights reserved.