0

我正在尝试在处理某些内容并且应用程序繁忙时显示ProgressView 。

在这个例子中

import SwiftUI

struct ContentView: View {

@State var isLoading:Bool = false

var body: some View {
    ZStack{

            if self.isLoading {
                ProgressView()
                    .zIndex(1)
            }

        Button("New View"){
      
            self.isLoading = true
           
            var x = 0
            for a in 0...5000000{
                x += a
            }
            
            self.isLoading = false
      
            print("The End: \(x)")
        }
        .zIndex(0)
    }
}
}  

在我的应用程序中,当我按下按钮时不会出现ProgressView

那么如何在 for 运行时显示ProgressView

我正在使用 Xcode 12

4

1 回答 1

0

您刚刚使用同步长按钮操作阻止了 UI 线程。解决方案是在后台进行。

这是可能的修复(使用 Xcode 12 / iOS 14 测试):

struct ContentView: View {

    @State var isLoading:Bool = false

    var body: some View {
        ZStack{

            if self.isLoading {
                ProgressView()
                    .zIndex(1)
            }

            Button("New View"){
                self.isLoading = true

                DispatchQueue.global(qos: .background).async {
                    var x = 0
                    for a in 0...500000 {
                        x += a
                    }

                    DispatchQueue.main.async {
                        self.isLoading = false
                        print("The End: \(x)")
                    }
                }
            }
            .zIndex(0)
        }
    }
}
于 2020-09-06T04:26:37.373 回答