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