本质上,我试图找到一种在 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/