下面的代码:
struct ContentView: View {
@State var show = false
var body: some View {
VStack {
ZStack {
Color.black
if show {
RoundedRectangle(cornerRadius: 20)
.fill(.brown)
.transition(.opacity)
}
}
Button {
withAnimation(.easeInOut(duration: 1)) {
show.toggle()
}
} label: {
Text("TRIGGER")
}
}
}
}
我想让RoundedRectangle淡入淡出。现在它只淡入。这是我所拥有的一个更复杂视图设置的简化版本。根据状态的不同,我可能有我想淡入或不淡入的视图。所以,我正在寻找一种淡入(就像现在这样),然后又淡出的方法,这样视图就完全从层次结构中删除了,而不仅仅是隐藏或什么的。
我如何才能让这个代码也淡出视图,而不是只淡入?
作为参考,我采用了以下方法:
https://swiftui-lab.com/advanced-transitions/
....
if show {
LabelView()
.animation(.easeInOut(duration: 1.0))
.transition(.opacity)
}
Spacer()
Button("Animate") {
self.show.toggle()
}.padding(20)
....
但是,在我的情况下,它并没有淡出。
2条答案
按热度按时间zazmityj1#
SwiftUI
ZStack
转换是很挑剔的。你需要添加一个zIndex
来确保层次结构被保留,从而启用动画。bqujaahr2#
您需要将不透明度直接链接到状态,以便它直接设置任何更改的动画。
编辑:反映要求删除视图的评论,而不仅仅是淡出...
要删除视图(和触发器.onDisappear),您可以进行如下修改:
这将如上所述淡入/淡出,但实际上将删除视图和打印“消失”