Ios 带有.navigationBarHidden的不需要的动画效果(true)
我在SwiftUI上有一个简单的加载视图 当我使用Ios 带有.navigationBarHidden的不需要的动画效果(true),ios,swift,swiftui,Ios,Swift,Swiftui,我在SwiftUI上有一个简单的加载视图 当我使用导航视图上的导航栏隐藏(true)显示此加载屏幕时。 有一个问题是动画对它有不必要的影响 这是我的加载动画 struct LoaderThreeDot: View { var size: CGFloat = 20 @State private var shouldAnimate = false var body: some View { HStack(alignmen
导航视图上的导航栏隐藏(true)
显示此加载屏幕时。
有一个问题是动画对它有不必要的影响
这是我的加载动画
struct LoaderThreeDot: View {
var size: CGFloat = 20
@State private var shouldAnimate = false
var body: some View {
HStack(alignment: .center) {
Circle()
.fill(Color.blue)
.scaleEffect(shouldAnimate ? 1.0 : 0.5, anchor: .center)
.animation(Animation.easeInOut(duration: 0.5).repeatForever())
.frame(width: size, height: size)
Circle()
.fill(Color.blue)
.scaleEffect(shouldAnimate ? 1.0 : 0.5, anchor: .center)
.animation(Animation.easeInOut(duration: 0.5).repeatForever().delay(0.3))
.frame(width: size, height: size, alignment: .center)
Circle()
.fill(Color.blue)
.scaleEffect(shouldAnimate ? 1.0 : 0.5, anchor: .center)
.animation(Animation.easeInOut(duration: 0.5).repeatForever().delay(0.6))
.frame(width: size, height: size, alignment: .center)
}
.onAppear {
self.shouldAnimate = true
}
}
}
加载视图
如下所示:
struct LoadingView<Content>: View where Content: View {
let title: String
var content: () -> Content
@State var showLoader = false
var body: some View {
ZStack {
self.content()
.disabled(true)
.blur(radius: 3)
Rectangle()
.foregroundColor(Color.black.opacity(0.4))
.ignoresSafeArea()
VStack {
if showLoader {
LoaderThreeDot()
}
Text(title)
.foregroundColor(.black)
.font(.body)
.padding(.top, 10)
}
.padding(.all, 60)
.background(backgroundView)
}
.onAppear {
showLoader.toggle()
}
}
private var backgroundView: some View {
RoundedRectangle(cornerRadius: 12)
.foregroundColor(Color.white)
.shadow(radius: 10)
}
}
NavigationView {
ZStack {
LoadingView(title: "Loading...") {
Rectangle()
.foregroundColor(.red)
}
}
.navigationBarHidden(true)
}
如果我删除.navigationBarHidden(true)
动画看起来正常。
所以我猜动画效果是在导航栏显示时开始的,它会在导航栏隐藏后以某种方式影响动画
有什么办法可以避免这种情况吗?更改主屏幕上的开关
// Other code
.onAppear() {
DispatchQueue.main.async { //<--- Here
showLoader.toggle()
}
}
// Other code
//其他代码
.onAppear(){
DispatchQueue.main.async{//谢谢Raja,它工作得很好。你只是帮我节省了很多时间。但是,你能解释一下为什么会这样吗?或者所有的动画切换都需要从主线程开始吗?不。这看起来像个bug。