Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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
获取CoreData时,如何在swiftUI中显示活动指示器?_Swift_Core Data_Swiftui - Fatal编程技术网

获取CoreData时,如何在swiftUI中显示活动指示器?

获取CoreData时,如何在swiftUI中显示活动指示器?,swift,core-data,swiftui,Swift,Core Data,Swiftui,当我在swiftUI中创建或更新CoreData条目时,我的应用程序需要一段时间才能更新。在此期间,我想以活动指示器的形式提供一些视觉反馈。接下来,我可以让加载视图出现,但如何让它在获取更新条目后消失 内容视图 加载视图 不确定你是否找到了这个问题的答案。。。在您的代码中,正在使用常量值true调用ActivityIndicatorSaniMating: 如果将其更改为使用LoadingView.isShowing,则当绑定(也设置为true的常量值)从true更改为false时,活动指示器将被

当我在swiftUI中创建或更新CoreData条目时,我的应用程序需要一段时间才能更新。在此期间,我想以活动指示器的形式提供一些视觉反馈。接下来,我可以让加载视图出现,但如何让它在获取更新条目后消失

内容视图

加载视图


不确定你是否找到了这个问题的答案。。。在您的代码中,正在使用常量值true调用ActivityIndicatorSaniMating:

如果将其更改为使用LoadingView.isShowing,则当绑定(也设置为true的常量值)从true更改为false时,活动指示器将被隐藏

例:

import SwiftUI
import CoreData

struct ContentView: View {

    @FetchRequest(entity: DiaryItem.entity(), sortDescriptors: [
        NSSortDescriptor(keyPath: \DiaryItem.createdAt, ascending: false),
    ]) var diaryItems : FetchedResults<DiaryItem>

    var body: some View {
        LoadingView(isShowing: .constant(true)) {
            HStack {
                ForEach(self.diaryItems) { diaryItem in
                    DiaryItemView(
                        title: diaryItem.title!,
                        createdAt: "\(diaryItem.createdAt!)",
                        diaryItem: diaryItem
                    )
                }
            }
        }
    }
}

struct ActivityIndicator: UIViewRepresentable {

    @Binding var isAnimating: Bool
    let style: UIActivityIndicatorView.Style

    func makeUIView(context: UIViewRepresentableContext<ActivityIndicator>) -> UIActivityIndicatorView {
        return UIActivityIndicatorView(style: style)
    }

    func updateUIView(_ uiView: UIActivityIndicatorView, context: UIViewRepresentableContext<ActivityIndicator>) {
        isAnimating ? uiView.startAnimating() : uiView.stopAnimating()
    }
}
struct LoadingView<Content>: View where Content: View {

    @Binding var isShowing: Bool
    var content: () -> Content

    var body: some View {
        GeometryReader { geometry in
            ZStack(alignment: .center) {

                self.content()
                    .disabled(self.isShowing)
                    .blur(radius: self.isShowing ? 3 : 0)

                VStack {
                    ActivityIndicator(isAnimating: .constant(true), style: .large)
                }
                .frame(width: geometry.size.width / 2,
                       height: geometry.size.height / 5)
                .background(Color.secondary.colorInvert())
                .foregroundColor(Color.primary)
                .cornerRadius(20)
                .opacity(self.isShowing ? 1 : 0)
            }
        }
    }
}
struct ContentView: View {
    @State var isLoading = true //Added to track when loading is happening

    @FetchRequest(entity: DiaryItem.entity(), sortDescriptors: [
        NSSortDescriptor(keyPath: \DiaryItem.createdAt, ascending: false),
    ]) var diaryItems : FetchedResults<DiaryItem>

    var body: some View {
        LoadingView(isShowing: $isLoading) {
            ...
        }
    }
}
ActivityIndicator(isAnimating: $isShowing, style: .large)