【SwiftUI】ぐるぐると回るインジゲーターを表示させたい

前提

ここに質問の内容を詳しく書いてください。
【スレッドを追加】を押すと
ぐるぐると回るインジゲーターを表示させたいのですが、
色々参考サイトを見ても表示されず、
【スレッドを追加】をクリックすると、
動作も重く、インジゲーターも表示されません。

実現したいこと

【スレッドを追加】をクリックすると、
インジゲーターを表示させたい。

発生している問題・エラーメッセージ

【スレッドを追加】を押すと ぐるぐると回るインジゲーターを表示させたい

該当のソースコード

Swift

1import SwiftUI2import NCMB3 4struct AddThreadView: View {5 @Environment(\.presentationMode) private var presentationMode 6 @State private var title = ""7 @State private var description = ""8 @State private var showingPicker = false9 @State private var image: UIImage?10 @State var isPresentedProgressView = false11 var body: some View {12 VStack {13 NavigationView {14 Form {15 TextField("スレッドのタイトルを入力してください", text: $title)16 TextField("スレッドの紹介文を入力してください", text: $description)17 Button(action: {18 showingPicker.toggle()19 }) {20 Text("画像追加")21 }22 if let image = image {23 Image(uiImage: image)24 .resizable()25 .aspectRatio(contentMode: .fit)26 }27 Button(action: {28// manageProgress()29 add()30 }) {31 ZStack {32 Text("スレッド追加")33 if isPresentedProgressView {34 Color.gray.opacity(0.5)35 ProgressView("読み込み中")36 }37 }38 }39 }40 }41 }42 .sheet(isPresented: $showingPicker) {43 ImagePickerView(image: $image, sourceType: .library)44 }45 }46 47 private func manageProgress() {48 // ProgressView 表示49 isPresentedProgressView = true50 // 3秒後に非表示に51 DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {52 self.isPresentedProgressView = false53 }54 }55 56 57 private func add() {58 let thread = NCMBObject(className: "Thread")59 let user = NCMBUser.currentUser 60 var acl = NCMBACL.empty 61 acl.put(key: "*", readable: true, writable: false)62 acl.put(key: user!.objectId!, readable: true, writable: true)63 thread.acl = acl 64 if let image = image {65 let uuid = UUID()66 let fileName = "\(uuid).jpg"67 let photo = NCMBFile(fileName: fileName, acl: acl)68 _ = photo.save(data: image.jpegData(compressionQuality: 80.0)!)69 thread["fileName"] = fileName 70 }71 thread["title"] = title 72 thread["description"] = description 73 let results = thread.save()74 if case .success(_) = results {75 presentationMode.wrappedValue.dismiss()76 } else {77 print("Error")78 }79 }80}81 82struct AddThreadView_Previews: PreviewProvider {83 static var previews: some View {84 AddThreadView()85 }86}87

試したこと

ProgressView("読み込み中")
↓↓↓
DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
self.isPresentedProgressView = false
}

で、秒数指定で表示させたいのですが、
この記述でも、
【スレッドを追加】をクリックすると、
動作が固まり、
最後に一瞬だけ
ProgressView("読み込み中")が
表示されます、、、、、、(1秒も表示されない)

補足情報(FW/ツールのバージョンなど)

ProgressViewに関する情報

参考サイト

ずっと悩んでますが
解決できません、

どうかお力をお貸しいただけますと
非常に嬉しいです。
よろしくお願い致します。

コメントを投稿

0 コメント