dev*_*vlo 15 ios swift swiftui
尝试使用AVKit的AVPlayer播放没有播放控件的视频:
private let player = AVPlayer(url: URL(fileURLWithPath: Bundle.main.path(forResource: "videoToPlay", ofType: "mp4")!))
player.showsPlaybackControls = false
Run Code Online (Sandbox Code Playgroud)
上述结果会产生一条错误消息,指出声明必须用“;”分隔。我也尝试过:
VideoPlayer(player: player)
.onAppear {
player.showsPlaybackControls = false
}
Run Code Online (Sandbox Code Playgroud)
这会导致不同的错误。
关于使用 swiftui 隐藏播放控件有什么建议吗?
jn_*_*pdx 23
VideoPlayer我在文档中似乎没有找到任何方法来控制是否显示播放控件。
showPlaybackControls不起作用,因为AVPlayer也不具有该属性。
看起来现在你必须做一些事情,比如包装一个AVPlayerViewController:
请注意,这是一个非常有限的示例,没有考虑到您可能需要考虑的很多场景,例如AVPlayerControllerRepresented由于父级更改而重新加载时会发生什么 - 您是否需要使用updateUIViewController它来更新其属性?您可能还需要一个AVPlayer比我使用的更稳定的解决方案来存储您的解决方案,只要父视图发生更改,它也会重新创建。但是,所有这些都是相对容易解决的架构决策(查看 ObservableObject、StateObject、Equatable 等)
struct ContentView: View {
let player = AVPlayer(url: URL(fileURLWithPath: Bundle.main.path(forResource: "IMG_0226", ofType: "mp4")!))
var body: some View {
AVPlayerControllerRepresented(player: player)
.onAppear {
player.play()
}
}
}
struct AVPlayerControllerRepresented : UIViewControllerRepresentable {
var player : AVPlayer
func makeUIViewController(context: Context) -> AVPlayerViewController {
let controller = AVPlayerViewController()
controller.player = player
controller.showsPlaybackControls = false
return controller
}
func updateUIViewController(_ uiViewController: AVPlayerViewController, context: Context) {
}
}
Run Code Online (Sandbox Code Playgroud)
对我来说,设置allowsHitTestingfalse 会隐藏 iOS 16 中的播放控件:
private let player = AVPlayer(url: URL(fileURLWithPath: Bundle.main.path(forResource: "videoToPlay", ofType: "mp4")!))
...
// Disable user interaction on the video player to hide playback controls
VideoPlayer(player: player)
.allowsHitTesting(false)
Run Code Online (Sandbox Code Playgroud)
可能有一些我遗漏的极端情况,用户界面仍然可以出现,但我还没有遇到过这种情况。
| 归档时间: |
|
| 查看次数: |
6412 次 |
| 最近记录: |