我需要在游戏结束时播放一段短片。
我在故事板上创建了一个AVPlayerViewController,其模式演示使用了之前View Controller中的segue。
但是我希望视频不要覆盖整个屏幕。让我们说屏幕尺寸的50%(居中)。
这是我尝试过的代码:
import AVKit
import AVFoundation
import UIKit
class VideoPlayerViewController: AVPlayerViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
// Play video
player?.play()
}
override func viewDidLayoutSubviews() {
print(videoBounds)
self.view.bounds = videoBounds
}
}
问题是视频缩放到整个屏幕非常小(比如100 * 70px左右)。我相信默认大小在某个时刻是100 * 100,它会缩放它以匹配我的视频比率。
如果我没有指定边界,它会缩放到整个屏幕(视频重力不要让我选择)。
如果我在viewDidLayoutSubviews中缩小整个视图的大小,它仍然不行,因为这个方法被多次调用,所以我不断改变我的视图边界。
我无法相信使用AVPlayerViewController在屏幕的一部分上显示本地视频有多难......
任何帮助?
答案 0 :(得分:1)
您可以将视图控制器设置为您喜欢的任何尺寸。像这样,如果你想:
let videoURL = URL(fileURLWithPath: videoPath)
let player = AVPlayer(url: videoURL)
let playerViewController = AVPlayerViewController()
playerViewController.view.frame = CGRect (x:100, y:100, width:200, height:100)
playerViewController.player = player
self.addChildViewController(playerViewController)
self.view.addSubview(playerViewController.view)
playerViewController.didMove(toParentViewController: self)
(显然,上面的尺寸会很奇怪,但你可以。如果你愿意的话)。
如果您想要自动管理的播放器控件,请使用ViewController。如果你想推出自己的控件,那么该层可能更好。
只需发布此内容即可更正表明除了全屏外不应使用VC的答案。似乎对我来说很好。
答案 1 :(得分:-2)
AVPlayerViewController仅用于全屏方式,最好使用AVPlayerLayer
,这样您就可以将其放大/放置在您选择的视图中。
let player = AVPlayer(url: myURL)
let layer = AVPlayerLayer(player: player)
layer.frame.size = CGSize(100,100)
layer.frame.origin = myView.center
player.play()