Ios SwiftUI-如何保留子视图';更新父视图时的状态';什么州?
我试图找到一种方法,在父视图更新时保留子视图。我有以下设置:Ios SwiftUI-如何保留子视图';更新父视图时的状态';什么州?,ios,swift,xcode,swiftui,avplayer,Ios,Swift,Xcode,Swiftui,Avplayer,我试图找到一种方法,在父视图更新时保留子视图。我有以下设置: struct VideoPlayerView: View { @State var fullScreen : Bool = false var body: some View { NavigationView { VStack { PlayerContainerView(url: URL(s
struct VideoPlayerView: View {
@State var fullScreen : Bool = false
var body: some View {
NavigationView {
VStack {
PlayerContainerView(url: URL(string: "video-link-from-vimeo")!, fullScreen: $fullScreen)
if !fullScreen {
VStack {
...very long content here...
}
}
}
.backgroundColor(self.fullScreen ? K.Colors.AppText : K.Colors.AppBackground)
.hideNavigationBar()
}
.hideNavigationBar()
}
}
PlayerContainerView只是我的包装,其中包含AVPlayer和一些自定义控件。为了在第一个位置显示玩家,如果相关的话,我使用了这个技术
我正在加载的视频来自Vimeo。正在从子视图更新fullScreen@State属性
想要的结果
我希望能够隐藏我的播放器下的所有内容,这样播放器就可以全屏显示。这可能在任何时候发生-即,当视频已经播放时,当视频在特定时间暂停时,等等
问题
问题是,如果我更新全屏@State属性,我会得到一个全新的视图,实际上,如果我在进入全屏之前播放视频,我会听到它仍在后台播放。我的全屏视频现在从头开始,而不是从进入全屏之前的位置恢复。问题是在视图更新之间,
AVPlayer
的状态没有恢复。一种可能的解决方案是将AVPlayer
作为参数提供给PlayerContainerView
(而不是url)