如何为视图 insertion/removal 设置动画转换?插入动画不起作用
How can I animate transition of a view insertion/removal? Insertion animation doesn't work
我无法在 SwiftUI 中进行插入转换。
我有一个 Group
有条件地显示两个视图之一。当我尝试为过渡设置动画时,移除过渡有效但插入无效 - 视图立即出现,没有任何动画。
我正在粘贴到我的查看代码下方。我怎样才能使这项工作?
(Xcode 11.3.1)
struct TestView: View {
@State private var showView = false
var body: some View {
VStack {
Button(action: {
withAnimation {
self.showView.toggle()
}
}) {
Text("Tap")
}
Group {
if showView {
Color.red
.frame(width: 100, height: 100)
} else {
Color.blue
.frame(width: 100, height: 100)
.cornerRadius(50)
}
}
.transition(.asymmetric(insertion: .move(edge: .leading),
removal: .move(edge: .trailing)))
}
}
}
编辑:
正如@Asperi 在评论中指出的那样,代码是正确的,但是......只有当 运行 在真实设备上时它才有效。 Xcode 中的实时预览有问题,显然不能很好地处理过渡。
所以这个问题的答案很简单:真机测试! :)
好吧,这只是从 SwiftUI 预览历史到现在的观察(不能说下一个版本会是什么),但是 - 过渡在预览中无法正常工作全部(静态或实时 - 看起来像是限制,所以不要在那里测试它们。
在独立的模拟器上或最好在真实设备上测试转换。
我无法在 SwiftUI 中进行插入转换。
我有一个 Group
有条件地显示两个视图之一。当我尝试为过渡设置动画时,移除过渡有效但插入无效 - 视图立即出现,没有任何动画。
我正在粘贴到我的查看代码下方。我怎样才能使这项工作? (Xcode 11.3.1)
struct TestView: View {
@State private var showView = false
var body: some View {
VStack {
Button(action: {
withAnimation {
self.showView.toggle()
}
}) {
Text("Tap")
}
Group {
if showView {
Color.red
.frame(width: 100, height: 100)
} else {
Color.blue
.frame(width: 100, height: 100)
.cornerRadius(50)
}
}
.transition(.asymmetric(insertion: .move(edge: .leading),
removal: .move(edge: .trailing)))
}
}
}
编辑:
正如@Asperi 在评论中指出的那样,代码是正确的,但是......只有当 运行 在真实设备上时它才有效。 Xcode 中的实时预览有问题,显然不能很好地处理过渡。
所以这个问题的答案很简单:真机测试! :)
好吧,这只是从 SwiftUI 预览历史到现在的观察(不能说下一个版本会是什么),但是 - 过渡在预览中无法正常工作全部(静态或实时 - 看起来像是限制,所以不要在那里测试它们。
在独立的模拟器上或最好在真实设备上测试转换。