Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 带有.navigationBarHidden的不需要的动画效果(true)_Ios_Swift_Swiftui - Fatal编程技术网

Ios 带有.navigationBarHidden的不需要的动画效果(true)

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

我在SwiftUI上有一个简单的加载视图

当我使用
导航视图上的
导航栏隐藏(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。