回答編集履歴

2

blackViewとの決別

2018/07/11 05:02

投稿

fuzzball
fuzzball

スコア16731

test CHANGED
@@ -1,4 +1,4 @@
1
- # その後はもう2度と表示させたくない
1
+ # 2度と表示させたくない
2
2
 
3
3
 
4
4
 
@@ -39,3 +39,33 @@
39
39
 
40
40
 
41
41
  これが原因だとすれば、blackViewの生成〜表示(addSubview)を`addSnapshotListener`の外に出せばいいです。
42
+
43
+
44
+
45
+ # blackViewの削除
46
+
47
+
48
+
49
+ viewDidDisappearにしようかと思いましたが、`present(_:animated:completion:)`のcompletionハンドラを使います。(こっちの方が分かりやすいと思うので)
50
+
51
+
52
+
53
+ FirstViewControllerに遷移したタイミングでblackViewを削除します。
54
+
55
+ blackViewはインスタンス変数にしておいて下さい。
56
+
57
+
58
+
59
+ ```swift
60
+
61
+ self.present(navi, animated: true) {
62
+
63
+ //FirstViewControllerへの遷移が完了した時点で実行されます
64
+
65
+ print("presented")
66
+
67
+ blackView.removeFromSuperview() //blackViewを剥がす
68
+
69
+ }
70
+
71
+ ```

1

0.5sec

2018/07/11 05:02

投稿

fuzzball
fuzzball

スコア16731

test CHANGED
@@ -1,4 +1,4 @@
1
- > その後はもう2度と表示させたくない
1
+ # その後はもう2度と表示させたくない
2
2
 
3
3
 
4
4
 
@@ -6,36 +6,36 @@
6
6
 
7
7
 
8
8
 
9
- > 約0.5秒後に遅れて表示される
9
+ # 約0.5秒後に遅れて表示される
10
10
 
11
11
 
12
12
 
13
- 表示させているとメインスレッドじゃなさそうなので、メインスレッド実行して下さい。
13
+ の遅れの原因`addSnapshotListener`実行完了まの時間はなかと思います
14
+
15
+ 下記のようにNSLog()を追加してログを確認してみて下さい。(ログの左端に時間が表示されます)
14
16
 
15
17
 
16
18
 
17
19
  ```swift
18
20
 
19
- guard let docSnapshot = docSnapshot, docSnapshot.exists else {
21
+ NSLog("") //ログ出力
20
22
 
23
+ dataListener = userRef.addSnapshotListener { [unowned self] (docSnapshot, error) in
21
24
 
25
+ guard let docSnapshot = docSnapshot, docSnapshot.exists else {
22
26
 
23
- print(Thread.isMainThread) //これがfalseならメインスレッドではない
27
+ NSLog("") //ログ出力
24
28
 
25
- DispatchQueue.main.async {
26
-
27
- //この中はメインスレッド
28
-
29
- //blackView表示
30
-
31
- //遷移処理もここに書く
29
+ :
32
30
 
33
31
  }
34
-
35
-
36
32
 
37
33
  return
38
34
 
39
35
  }
40
36
 
41
37
  ```
38
+
39
+
40
+
41
+ これが原因だとすれば、blackViewの生成〜表示(addSubview)を`addSnapshotListener`の外に出せばいいです。