SwiftUI,如何调整视频大小以填充所有垂直方向(iPhone),同时保持宽高比(屏幕外的左右不可见边缘)

wee*_*ior 4 video xcode frame avkit swiftui

我有一个适合在电视或笔记本电脑上观看的视频(即横向主导)。我需要使该视频垂直填满 iPhone 屏幕,而不会使视频超出纵横比。因此,视频左侧和右侧的大部分内容都会从屏幕的左侧和右侧渗出。

CodingWithChris 在这里以故事板的形式完成了这一点:https://www.youtube.com/watch?v =1HN7usMROt8(放大到 1:35:00)我需要知道如何在 SwiftUI 中以编程方式执行此操作。

目前我有一个在模拟器 onAppear 中播放的视频。这是我的代码:

struct SignInView: View {

private let player = AVPlayer(url: URL(fileURLWithPath: Bundle.main.path(forResource: "DL_preview", ofType: "mp4")!))

var body: some View {
    
    ZStack {
        VideoPlayer(player: player)
            .onAppear() {
                player.isMuted = true
                player.play()
            }
        VStack {
Run Code Online (Sandbox Code Playgroud)

这是视频的屏幕截图,以供纵横比参考。想象一下在此屏幕截图的中央直立放置的 iPhone(纵向)。这就是我想要填充整个屏幕的所有框架。 视频截图

非常感谢你的帮助!!

jn_*_*pdx 10

假设您的视频的宽高比为 16:9,则可以使用以下内容:

struct ContentView: View {
    private let player = AVPlayer(url: URL(fileURLWithPath: Bundle.main.path(forResource: "mov1", ofType: "mov")!))
    
    var body: some View {
        ZStack {
            GeometryReader { proxy in
                VideoPlayer(player: player)
                    .ignoresSafeArea()
                    .frame(width: proxy.size.height * 16 / 9, height: proxy.size.height)
                    .position(x: proxy.size.width / 2, y: proxy.size.height / 2)
                    .onAppear() {
                        player.isMuted = true
                        player.play()
                    }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它使用 来GeometryReader获取 的可用大小View,然后将其转换为frame的 a VideoPlayer。最后,它使用修改器对其进行定位,使其居中position