lef*_*uce 16 xcode animation transition swift swiftui
我试图让我的视图使用.transition()on 视图进行动画/过渡。我从这里使用类似的代码并放入.transition()两个条件视图。
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()
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,每当我单击“登录”按钮(有或没有.transition())时,应用程序都会冻结一秒钟,然后Home()视图会突然出现而没有任何动画/过渡。我也试过换行self.isSignedIn = true,withAnimation但还是不行。任何想法或有更好的方法来做到这一点?
raf*_*nes 15
将您的.transition放在将切换的视图的容器上,而不是每个条件视图上。这是我完成的一些代码中的一个简单示例(有效)。
在需要有条件转换的主视图中:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在触发条件变化的视图中的某处:
import SwiftUI
struct FirstRunView: View {
@Binding var showFirstRun:Bool
var body: some View {
Button(action: {
withAnimation {
self.showFirstRun = false
}
}) {
Text("Done")
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不得不将我的if..else声明放在ZStack容器中而不是Group. Group在我的情况下,这似乎是动画损坏的主要原因。此外,我.transition与.animation容器而不是视图结合使用。
ZStack {
if(isSignedIn){
Home()
} else {
AuthSignin(isSignedIn: self.$isSignedIn)
}
}
.transition(.slide)
.animation(.easeInOut)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5198 次 |
| 最近记录: |