SwiftUI 中的动画状态变化
Animate State change in SwiftUI
我目前正在研究 SwiftUI。在 SwiftUI 中,可以为状态变化设置动画,例如:
struct Foo: View {
@State private var show = false
var body: some View {
VStack {
if show {
Text("Foo")
}
Button(action: {
withAnimation {
self.show.toggle()
}
}) {
Text(show ? "Hide" : "Show")
}
}
}
}
但是如果我有一个 TextField:
struct Foo: View {
@State private var text = ""
var body: some View {
VStack {
TextField($text, placeholder: Text("Foo")) {
print("editing ended")
}
if !text.isEmpty {
Button(action: {}) {
Text("Done")
}
}
}
}
}
我无法找到一种方法来为这种变化设置动画,因为 State 属性 由 TextField 更改而无需调用 withAnimation()。
是否可以将此更改动画化?
只需添加动画修改器来包装您的按钮
var body: some View {
VStack {
TextField($text, placeholder: Text("Foo")) {
print("editing ended")
}
// if !text.isEmpty {
Button(action: {}) {
Text("Done")
}
.background(text.isEmpty ? Color.red : Color.yellow )
//.animation(.basic(duration: 1))
.animation(Animation.default.speed(1))
}
}
}
TextField("Placeholder", text:$text.animation())
所有使用该文本的内容都会在更改时进行动画处理。
我目前正在研究 SwiftUI。在 SwiftUI 中,可以为状态变化设置动画,例如:
struct Foo: View {
@State private var show = false
var body: some View {
VStack {
if show {
Text("Foo")
}
Button(action: {
withAnimation {
self.show.toggle()
}
}) {
Text(show ? "Hide" : "Show")
}
}
}
}
但是如果我有一个 TextField:
struct Foo: View {
@State private var text = ""
var body: some View {
VStack {
TextField($text, placeholder: Text("Foo")) {
print("editing ended")
}
if !text.isEmpty {
Button(action: {}) {
Text("Done")
}
}
}
}
}
我无法找到一种方法来为这种变化设置动画,因为 State 属性 由 TextField 更改而无需调用 withAnimation()。
是否可以将此更改动画化?
只需添加动画修改器来包装您的按钮
var body: some View {
VStack {
TextField($text, placeholder: Text("Foo")) {
print("editing ended")
}
// if !text.isEmpty {
Button(action: {}) {
Text("Done")
}
.background(text.isEmpty ? Color.red : Color.yellow )
//.animation(.basic(duration: 1))
.animation(Animation.default.speed(1))
}
}
}
TextField("Placeholder", text:$text.animation())
所有使用该文本的内容都会在更改时进行动画处理。