我打不走UIView
(名为videoView),其中有一个灰色的整个区域的视频:iPhone 7 Plus Simulator Screenshot
大部分的答案声称我需要任一组所述框架(UIView
的)边界或设置videoGravity
到AVLayerVideoGravityResizeAspectFill
。我用尽全力,但由于某种原因它仍然无法完全填补空间。
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)
}
任何帮助将不胜感激。 :)
经过很长一段时间我找到了答案。
下面的代码应移入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()该应用调整大小根据新的约束窗口。
只要将帧线avPlayerLayer.frame = videoView.layer.bounds
成这样viewDidLayoutSubviews
:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
avPlayerLayer.frame = videoView.layer.bounds
}
其余的应该坚持到viewDidLoad
功能,就像你一样。