質問するログイン新規登録

回答編集履歴

1

修正案の動作確認をしていた時のコードを追記しました。

2021/11/03 11:30

投稿

__k_san__
__k_san__

スコア177

answer CHANGED
@@ -54,4 +54,104 @@
54
54
  }, label: {
55
55
  Text("開始")
56
56
  })
57
+ ```
58
+
59
+ ---
60
+
61
+ 追記:
62
+ ちょっと長くなってしまいますが、質問に掲載されていたコードをなるべくそのまま使う形にて修正案の動作確認していたときのコードを以下にて共有します。(重たい処理は仮に `sleep(10)` としています。)
63
+ ```swift
64
+ import SwiftUI
65
+
66
+ struct Constants {
67
+ static let RESULT_OK: Int = 0
68
+ }
69
+
70
+ struct ContentView: View {
71
+
72
+ //プログレスビュー表示フラグ
73
+ @State var isProgressShowing: Bool = false
74
+ //処理クラス
75
+ @ObservedObject var predictorIns: InspectorModel_Crossing = InspectorModel_Crossing()
76
+ //処理結果
77
+ @State var predictRslt: Int = 0
78
+
79
+ var recentImageName = "hoge"
80
+
81
+ var body: some View {
82
+ ZStack {
83
+
84
+ Button(action: {
85
+ //実施
86
+ predictorIns.startInspect(imageName: self.recentImageName + ".JPG") { result in
87
+ self.predictRslt = result
88
+ }
89
+ }, label: {
90
+ Text("開始")
91
+ })
92
+
93
+ //測定中はその旨表示する
94
+ if self.isProgressShowing {
95
+ Color.white
96
+ .opacity(0.7)
97
+ .edgesIgnoringSafeArea(.all)
98
+ .overlay(
99
+ ProgressView("処理中…")
100
+ .foregroundColor(.black)
101
+ )
102
+ }
103
+ }
104
+ .frame(width: 700)
105
+
106
+ //処理開始時処理
107
+ .onChange(of: self.predictorIns.proccessingStartedFlg, perform: { value in
108
+
109
+ print("proccessingStartedFlg changed (value=(value))")
110
+
111
+
112
+ self.isProgressShowing = true
113
+
114
+ })
115
+ //処理終了時処理
116
+ .onChange(of: self.predictorIns.proccessingFinishedFlg, perform: { value in
117
+
118
+ print("proccessingFinishedFlg changed (value=(value))")
119
+
120
+ // 処理中画面非表示
121
+ self.isProgressShowing = false
122
+
123
+ //測定結果がOKであれば
124
+ if self.predictRslt == Constants.RESULT_OK {
125
+
126
+ // ~~~後処理を実施~~~
127
+ }
128
+
129
+ })
130
+
131
+ }
132
+
133
+ }
134
+
135
+ class InspectorModel_Crossing: ObservableObject {
136
+ //処理開始を知らせるフラグ(開始するとフラグが変化する)
137
+ @Published var proccessingStartedFlg: Bool = false
138
+ //処理終了を知らせるフラグ(終了するとフラグが変化する)
139
+ @Published var proccessingFinishedFlg: Bool = false
140
+
141
+ //処理の開始
142
+ func startInspect(imageName: String, uiImageObj: UIImage? = nil, completion: ((Int) -> Void)? = nil) {
143
+
144
+ self.proccessingStartedFlg.toggle()
145
+
146
+ DispatchQueue.main.async {
147
+ // ~~~すごく重たい処理~~~
148
+ sleep(10)
149
+
150
+ self.proccessingFinishedFlg.toggle()
151
+
152
+ completion?(Constants.RESULT_OK)
153
+ }
154
+ }
155
+
156
+ }
57
157
  ```