在 Swiftui 视图之间保持相同的 UIViewControllerRepresentable 而无需重新创建它

问题描述 投票:0回答:1

最初我有一个 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 uikit avplayer avplayerviewcontroller
1个回答
0
投票

您是否考虑过在 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
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.