swiftui - 自定义 SwiftUI 视频播放器,其控件隐藏(全屏除外)

标签 swiftui avplayer fullscreen avkit ipados

本质上,我试图找到一种在 SwiftUI iPad 应用程序中实现自定义视频播放器的方法,该应用程序隐藏了除全屏按钮之外的所有控件。

据我了解,仅隐藏特定控件是不可能的,但我想知道是否可以构建一个自定义按钮,使视频播放器全屏显示。这是我的代码:

//My Custom Video Player class
import SwiftUI
import AVKit
    
    struct CustomVideoPlayer : UIViewControllerRepresentable {
        var player : AVPlayer
        
        func makeUIViewController(context: Context) -> AVPlayerViewController {
            let controller = AVPlayerViewController()
            controller.player = player
            controller.showsPlaybackControls = false //Important to not show any native videoplayer controls
            controller.videoGravity = .resizeAspectFill
            loopVideo(player: player)
            return controller
        }
        
        func updateUIViewController(_ uiViewController: AVPlayerViewController, context: Context) {
    
        }
        
        func loopVideo(player p: AVPlayer) {
                NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: p.currentItem, queue: nil) { notification in
                    p.seek(to: .zero)
                    p.play()
                }
            }
    }
import SwiftUI
import AVKit

struct ContentView: View {
    
    var player1 = AVPlayer(url: URL(string: "urlPlaceholder")!)
    
var body: some View {
         CustomVideoPlayer(player: player1)
                 .onAppear {
                      player1.play()
                 }
}

最佳答案

我设法通过将视频播放器复制到 .fullScreenCover 中来完成这项工作。这不是以编程方式控制视频播放器的解决方案,而是在没有控件的情况下全屏显示播放器的解决方案:

ZStack{
                    CustomVideoPlayer(player: player1)
                        .onAppear {
                            player1.play()
                        }
                        .frame(height: 470)
                        .cornerRadius(10)
                        
                    VStack{
                        HStack{
                            Spacer()
                            FullScreen_Button()
                        }
                        Spacer()
                    }
                }.fullScreenCover(isPresented: $fullScreen1, content: {
                    ZStack{
                        CustomVideoPlayer(player: player1)
                            .onAppear {
                                player1.play()
                            }
                        VStack{
                            HStack{
                                Spacer()
                                FullScreen_Button()
                            }
                            Spacer()
                        }
                    }
                    
                })

幸运的是,视频播放器会自动从当前位置继续播放。

关于swiftui - 自定义 SwiftUI 视频播放器,其控件隐藏(全屏除外),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74364092/

相关文章:

swift - 保存 Firebase 存储视频并使用 AVPlayerViewController 播放

css - 全屏网站显示水平滚动条并在右侧切开

ios - 应用程序未覆盖 iPad 上的整个屏幕

ios - 如何在 SwiftUI 预览中打印?

SwiftUI - 设置背景颜色时大型导航栏被破坏

ios - 带有失真的 AvPlayer

java - 使单个组件全屏

swiftui - 不符合协议(protocol) BindableObject - Xcode 11 Beta 4

ios - SwiftUI:动画文本颜色 - foregroundColor()

iOS - AVPlayer 不播放 mov 文件