回答編集履歴
1
修正案の動作確認をしていた時のコードを追記しました。
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
|
```
|