Swiftui 不可见过渡移除动画
我遇到了一个我无法完全满意地修补的问题 我有一个Swiftui 不可见过渡移除动画,swiftui,Swiftui,我遇到了一个我无法完全满意地修补的问题 我有一个主视图,它可以更改environmentObjectSelectionObject以显示链接枚举中的ZStack内容*。问题是当MasterView中有背景时,删除转换几乎是不可见的(Color.gray,当我设置不透明度时,动画会有一点可见,但除非它达到较低的数值,FirstView或SecondView的整体不透明度会受到影响。在MasterView 这是我的密码: class SelectionObject: ObservableObject
主视图
,它可以更改environmentObjectSelectionObject
以显示链接
枚举中的ZStack内容*。问题是当MasterView中有背景时,删除转换几乎是不可见的(Color.gray
,当我设置不透明度时,动画会有一点可见,但除非它达到较低的数值,FirstView
或SecondView
的整体不透明度会受到影响。在MasterView
这是我的密码:
class SelectionObject: ObservableObject {
@Published var selection: Link? = nil
}
struct MasterView: View {
@EnvironmentObject var selection: SelectionObject
var body: some View {
ZStack {
Color.gray
VStack {
ForEach(Link.allCases) { menu in
Button(action: {
selection.selection = menu
}, label: {
Label(menu.title, systemImage: menu.image).padding()
}
)
.tag(menu)
}
}
ForEach(Link.allCases) { menu in
if menu == selection.selection {
menu.contentView
.transition(AnyTransition.slide)
.animation(.spring())
}
}
}
}
}
struct Menu_Previews: PreviewProvider {
static var previews: some View {
MasterView().environmentObject(SelectionObject())
}
}
struct FirstView: View {
@EnvironmentObject var selection: SelectionObject
var body: some View {
ZStack {
Color.orange
VStack {
Text("First View content")
Button(action: {
selection.selection = nil
}, label: {
Text("Get back with a nice animation").padding().foregroundColor(.white)
}
)
}
}
}
}
struct SecondView: View {
@EnvironmentObject var selection: SelectionObject
var body: some View {
ZStack {
Color.orange
VStack {
Text("Second View content")
Button(action: {
selection.selection = nil
}, label: {
Text("Get back with a nice animation")
}
)
}
}
}
}
enum Link: Int, CaseIterable, Identifiable {
var id: Int {
return self.rawValue
}
case first
case second
var title: LocalizedStringKey {
switch self {
case .first: return "First"
case .second: return "Second"
}
}
var image: String {
switch self {
case .first: return "icloud"
case .second: return "display"
}
}
var contentView: AnyView {
switch self {
case .first: return AnyView ( FirstView() )
case .second: return AnyView ( SecondView() )
}
}
}
我曾尝试使用zIndex方法(这里提到:),但无法使其工作,因为它只工作了一次,并且在第二次单击时没有显示内容
你能帮我找到解决这个问题的办法吗
- 我之所以使用它,是因为我不能使用
NavigationView
,因为我的MasterView
在不同的NavigationView中的覆盖中使用,并且存在帧、偏移和拐角半径问题,除非我删除偏移或拐角半径,否则无法单击任何内容
只需在菜单中添加一个zIndex
。contentView
将始终位于顶部。因此,您可以看到背面动画
menu.contentView
.id(UUID()) // << add id here
.transition(AnyTransition.slide)
.animation(.spring())
.zIndex(50) //<< set higher zIndex here
menu.contentView
.id(UUID())//不幸的是,它多次对我不起作用->我有,同样的问题甚至在模拟器中也存在。第一次单击OK,然后它就什么都不起作用了。编辑:同样的问题仍然存在于我的应用程序项目中。谢谢你的视频。我想我可以重新创建它。让我再检查一遍,这超出了我的能力范围。即使我将代码放在我的应用程序上,它对我来说都不起作用iPhone…PS:我甚至在我的iPhone上得到了“Thread 1:EXC_BREAKPOINT(code=1,subcode=0x1937b3e30)”,当我把zIndex放在我的应用程序项目中时(代码基本上是一样的,我只是简化了这里的视图数量和样式),我已经更新了代码。试着使用ad id(UUID())并再次检查UUID中的错误。非常感谢!