前提
ここに質問の内容を詳しく書いてください。
【スレッドを追加】を押すと
ぐるぐると回るインジゲーターを表示させたいのですが、
色々参考サイトを見ても表示されず、
【スレッドを追加】をクリックすると、
動作も重く、インジゲーターも表示されません。
実現したいこと
【スレッドを追加】をクリックすると、
インジゲーターを表示させたい。
発生している問題・エラーメッセージ
【スレッドを追加】を押すと ぐるぐると回るインジゲーターを表示させたい
該当のソースコード
Swift
1import SwiftUI 2import NCMB 3 4struct AddThreadView: View { 5 @Environment(\.presentationMode) private var presentationMode 6 @State private var title = "" 7 @State private var description = "" 8 @State private var showingPicker = false 9 @State private var image: UIImage? 10 @State var isPresentedProgressView = false 11 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 = true 50 // 3秒後に非表示に 51 DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) { 52 self.isPresentedProgressView = false 53 } 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に関する情報
ずっと悩んでますが
解決できません、
どうかお力をお貸しいただけますと
非常に嬉しいです。
よろしくお願い致します。
回答1件