【发布时间】:2021-03-24 05:53:30
【问题描述】:
几天以来我一直在使用 SwiftUI,目前我正在尝试实现一个视频播放器,但我正在努力解决大小问题。
这是我的视图代码:
struct test: View {
var body: some View {
PlayerView()
.aspectRatio(contentMode: .fit)
.background(Color.blue)
}
}
这就是 PlayerView() 里面的内容
class PlayerUIView: UIView {
private let playerLayer = AVPlayerLayer()
override init(frame: CGRect) {
super.init(frame: frame)
let url = URL(string: "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8")!
let player = AVPlayer(url: url)
player.isMuted = true
player.play()
playerLayer.player = player
playerLayer.videoGravity = AVLayerVideoGravity.resizeAspect
layer.addSublayer(playerLayer)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews() {
super.layoutSubviews()
playerLayer.frame = bounds
}
}
使用这段代码我得到了这个:
我想去掉这个额外的边框(我们可以看到蓝色),但我不知道该怎么做。
我尝试将 playerLayer 的 videoGravity 属性设置为:
- 调整大小:我没有边框了,但是视频被拉伸了
- resizeAspectFill:我没有边框了,但是视频被剪掉了
如何在保留视频提供的原始比例和大小的同时去除这些边框?
【问题讨论】:
-
将背景颜色改为白色?
-
谢谢,但这并没有解决问题,帧仍然比视频本身大。
-
所以让frame和player frame一样?
-
只有当视图和视频具有相同的纵横比时,您才能实现目标。请参阅stackoverflow.com/a/7868633/22147 进行类似讨论。
标签: ios swift swiftui avfoundation avplayer