SwiftUI,如何调整视频大小以填充所有垂直(iPhone),同时保持纵横比(左右不可见边缘超出屏幕)

3

我有一个适合在电视或笔记本电脑上观看的视频(即横向为主)。我需要使这个视频在垂直方向上填满iPhone屏幕,而不会拉伸视频而失去比例。因此,视频的左侧和右侧将在屏幕的左侧和右侧溢出。

CodingWithChris在故事板形式下完美地做到了这一点:https://www.youtube.com/watch?v=1HN7usMROt8 (跳转至1:35:00) 我需要知道如何通过SwiftUI编程实现这一点。

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

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 {

这是一个与宽高比相关的视频截图。想象一下,一个竖直放置的iPhone(纵向)位于截图的中心。我希望整个屏幕都能填满这个框架,只显示这部分画面。 视频截图 非常感谢您的帮助!
1个回答

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()
                    }
            }
        }
    }
}

它使用GeometryReader来获取View的可用大小,然后将其转换为VideoPlayerframe。最后,使用position修饰符将其定位在中心位置。

非常好,谢谢!你能教我“如何钓鱼”吗?也就是说,告诉我如何在苹果文档中找到这个解决方案。 - weekendwarrior
1
我并不真正看到如何在文档中找到这个答案。我认为更多的是习惯于分解问题,然后找到适合的解决方案。GeometryReader 可能是最棘手的部分——知道可以使用它来测量大小非常重要。frameposition 修饰符相当简单。 - jnpdx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接