【发布时间】:2020-11-23 14:36:31
【问题描述】:
我需要您的帮助来了解我遇到的问题。我无法让视图在过渡动画之前重绘其主体。看看这个简单的例子:
import SwiftUI
struct ContentView: View {
@State private var condition = true
@State private var fgColor = Color.black
var body: some View {
VStack {
Group {
if condition {
Text("Hello")
.foregroundColor(fgColor)
} else {
Text("World")
}
}
.transition(.slide)
.animation(.easeOut(duration: 3))
Button("TAP") {
fgColor = .red
condition.toggle()
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
我对这个例子的期望是:当我点击按钮时,视图会再次创建它的主体,并且文本“Hello”变成红色。现在,视图再次创建了它的主体,并且发生了转换。相反,SwiftUI 似乎以某种方式合并了两个状态更改,并且只考虑了第二个。结果是发生了转换,但文本“Hello”不会改变它的颜色。
如何在 SwiftUI 中处理这种情况?有没有办法告诉框架分别更新两个状态变化?谢谢。
编辑@Asperi:
我尝试了您的代码,但它不起作用。结果还是一样。这是您的代码的完整示例:
import SwiftUI
struct ContentView: View {
@State private var condition = true
@State private var fgColor = Color.black
var body: some View {
VStack {
VStack {
if condition {
Text("Hello")
.foregroundColor(fgColor)
.transition(.slide)
} else {
Text("World")
.transition(.slide)
}
}
.animation(.easeOut(duration: 3))
Button("TAP") {
fgColor = .red
condition.toggle()
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
这是结果(在 iPhone 12 Mini iOS 14.1 上):
【问题讨论】: