我正在设置一些播客,我想将视频的封面图像更改为全屏显示时的scaleAspectFit,而不是全屏显示时的scaleAspectFill。我该怎么做并禁用全屏显示选项?
这是使用Apple的AVKit框架的Swift项目。过去,我尝试将全屏和非全屏都更改为特定的内容模式,但是当全屏显示或返回正常屏幕时,此内容模式不会更改。
private func addPlayer() {
// If audio URL is invalid, return
guard let audioURL = URL(string: material?.content?.first??.source ?? "") else { print("Invalid podcast audio URL."); return }
// Setup AVPlayerViewController
let playerViewController = AVPlayerViewController()
playerViewController.player = AVPlayer(url: audioURL)
playerViewController.view.frame = playerView.bounds
playerView.addSubview(playerViewController.view)
// Add image view
guard let podcastImageurl = URL(string: material?.coverImage?.source ?? "") else { return }
guard let imageData = (try? Data(contentsOf:podcastImageurl)) else { return }
// podcast(imageData: imageData)
let imageView = UIImageView(image: UIImage(data: imageData))
imageView.contentMode = .scaleAspectFill
playerViewController.contentOverlayView?.addSubview(imageView)
// Add observer (to update image view size)
playerViewController.addObserver(self, forKeyPath: "videoBounds", options: NSKeyValueObservingOptions.new, context: nil)
// Set playerViewController
self.playerViewController = playerViewController
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "videoBounds", let contentOverlayView = playerViewController?.contentOverlayView, let imageView = contentOverlayView.subviews.first as? UIImageView {
let overlayWidth = contentOverlayView.frame.width
let screenWidth = UIScreen.main.bounds.width
let screenHeight = UIScreen.main.bounds.height
imageView.frame = overlayWidth == screenWidth || overlayWidth == screenHeight ? CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight) : contentOverlayView.frame
}
}
我希望视频根据视频的大小(全屏或不全屏)更改内容模式(scaleAspectFit或scaleAspectFill)。另外,我希望能够在需要时将视频禁用为全屏显示。