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

回答編集履歴

1

sample

2017/03/16 01:17

投稿

fuzzball
fuzzball

スコア16733

answer CHANGED
@@ -1,2 +1,64 @@
1
1
  このコードだと、ループ中は画面が更新されないので増えていく様子は見えないと思います。
2
- 質問用に抽出したコードなのであれば、実際のコードを書いて下さい。
2
+ 質問用に抽出したコードなのであれば、実際のコードを書いて下さい。
3
+
4
+ ---
5
+
6
+ # sample
7
+
8
+ ## Swift 2
9
+
10
+ ```swift
11
+ func test() {
12
+
13
+ self.progressBar.minValue = 0
14
+ self.progressBar.maxValue = Double(arr.count)//最大値はファイル数
15
+ self.progressBar.doubleValue = 0
16
+ self.progressBar.indeterminate = false
17
+
18
+ //別スレッドで実行
19
+ dispatch_async(dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0)) {
20
+ for path in self.arr {
21
+
22
+ //処理
23
+ print(path)
24
+ NSThread.sleepForTimeInterval(1.0)//コピーの代わりに1秒ウェイト
25
+
26
+ //更新 (UIなのでメインスレッドで実行)
27
+ dispatch_async(dispatch_get_main_queue(), {
28
+ self.progressBar.incrementBy(1)//1増やす
29
+ })
30
+ }
31
+ print("finished")
32
+ }
33
+ }
34
+ ```
35
+
36
+ ## Swift3
37
+
38
+ ビルド&動作未確認です。
39
+
40
+ ```swift
41
+ func test() {
42
+
43
+ self.progressBar.minValue = 0
44
+ self.progressBar.maxValue = Double(arr.count)//最大値はファイル数
45
+ self.progressBar.doubleValue = 0
46
+ self.progressBar.indeterminate = false
47
+
48
+ //別スレッドで実行
49
+ DispatchQueue.global(qos: .default).async {
50
+ for path in self.arr {
51
+
52
+ //処理
53
+ print(path)
54
+ Thread.sleep(for​Time​Interval:​ 1.0)//コピーの代わりに1秒ウェイト
55
+
56
+ //更新 (UIなのでメインスレッドで実行)
57
+ DispatchQueue.main.async {
58
+ self.progressBar.increment(by:​ 1)//1増やす
59
+ })
60
+ }
61
+ print("finished")
62
+ }
63
+ }
64
+ ```