最初我有一个 swiftui 视图:
MediaPlayerView : View {
SwiftUIPlayer()
}
struct SwiftUIPlayer: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> MediaPlayerViewController {
这效果很好。当方向改变时,UIViewControllerRepresentable 保持不变并继续播放视频。
然后我创建了风景视图和肖像视图
例如。
LandscapeMediaPlayerView : View {
SwiftUIPlayer()
}
PotraitMediaPlayerView : View {
SwiftUIPlayer()
}
if isLandscape {
LandscapeMediaPlayer()
} else {
PotraitMediaPlayer()
}
现在重新创建 SwiftUIPlayer 和底层 ViewController 和 AVPlayerViewcontrollers 重置视频。
这里最好/最简单的方法是什么? 如果有 1 个 Mediaplayer 视图根据传入的“isLandscape”布尔值进行更改,这将是一件很痛苦的事情。
有一个单例 AVPlayer 实例吗?这引起了问题,但我应该坚持下去吗?
您是否考虑过在 SwiftUI 视图之外创建一个对象并将其传入?
ParentView.swift
let PortraitView = PortraitView()
let ChildView = ChildView(portraitView: PortraitView)
var body: some View {
ChildView
}
ChildView.swift
struct ChildView: View {
let portraitView: PortraitView
var body: some View {
portraitView
}
}