gpt4 book ai didi

SwiftUI 条件 View 不会动画/过渡

转载 作者:行者123 更新时间:2023-12-03 09:16:50 24 4
gpt4 key购买 nike

我正在尝试使用 .transition() 使我的 View 动画/过渡关于意见。我使用来自 here 的类似代码并放 .transition()到两个条件 View 。

struct Base: View {
@State private var isSignedIn = false

var body: some View {
Group {
if(isSignedIn){
Home().transition(.slide)
}else{
AuthSignin(isSignedIn: self.$isSignedIn).transition(.slide)
}
}
}
}

struct AuthSignin: View {
@Binding var isSignedIn: Bool

var body: some View {
VStack {
Button(action: {
self.isSignedIn = true
}) {
Text("Sign In")
.bold()
.frame(minWidth: CGFloat(0), maxWidth: .infinity)
.padding()
.background(Color.blue)
.foregroundColor(Color.white)
.cornerRadius(CGFloat(10))
}.padding()
}
}
}

但是,每当我点击“登录”按钮(无论是否有 .transition() ),应用程序都会卡住一秒钟,然后是 Home() View 会突然出现而没有任何动画/过渡。我也试过包装 self.isSignedIn = truewithAnimation但它仍然不起作用。任何想法或有更好的方法来做到这一点?

最佳答案

放置您的 .transition将切换的 View 容器 ,不是每个条件 View 。这是我完成的一些代码中的一个简单示例(有效)。

在需要有条件转换的主 View 中:

import SwiftUI

struct AppWrapperView: View {

@State var showFirstRun:Bool = true

var body: some View {
ZStack {
if (showFirstRun) {
FirstRunView(showFirstRun: $showFirstRun)
} else {
Text("Some other view")
}
}
.transition(.slide)
}
}

然后,在触发条件变化的 View 中的某处:
import SwiftUI

struct FirstRunView: View {

@Binding var showFirstRun:Bool

var body: some View {

Button(action: {
withAnimation {
self.showFirstRun = false
}
}) {
Text("Done")
}
}
}

关于SwiftUI 条件 View 不会动画/过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59064231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com