質問: .coverVertical self.present(navi, animated: true, completion: nil) return } } } ``` FirstViewControllerからSecondViewControllerへ、 そこから次はThirdViewControllerへとpush遷移し、 この時db.collection("aaa").document("bbb")へデータが保存される処理をします。 そしてdissmissでコード1のHugaViewControllerに戻ります。 ### 試したこと コード1の //FireStore guard文 の部分では docSnapshot.existsがelseの時 //モーダル遷移 は実行できているので、 同様にモーダル遷移する前だけblackViewを表示できるのでは?と思いましたが、 HugaViewControllerに戻った後も変わらずblackViewは表示されたままです。 viewWillAppearやviewDidLoadでコード1と同様のコードで試しましたが、 (約0.5秒遅れる所や戻った後も表示されるなど)同じ動作になってしまいます。
回答: 2度と表示させたくない ============ 表示フラグを作ってUserDefaultsに保存して下さい。 約0.5秒後に遅れて表示される ================ この遅れの原因は`addSnapshotListener`の実行完了までの時間ではないかと思います。 下記のようにNSLog()を追加してログを確認してみて下さい。(ログの左端に時間が表示されます) ``` NSLog("") //ログ出力 dataListener = userRef.addSnapshotListener { [unowned self] (docSnapshot, error) in guard let docSnapshot = docSnapshot, docSnapshot.exists else { NSLog("") //ログ出力 : } return } ``` これが原因だとすれば、blackViewの生成〜表示(addSubview)を`addSnapshotListener`の外に出せばいいです。 blackViewの削除 ============= viewDidDisappearにしようかと思いましたが、`present(_:animated:completion:)`のcompletionハンドラを使います。(こっちの方が分かりやすいと思うので) FirstViewControllerに遷移したタイミングでblackViewを削除します。 blackViewはインスタンス変数にしておいて下さい。 ``` self.present(navi, animated: true) { //FirstViewControllerへの遷移が完了した時点で実行されます print("presented") blackView.removeFromSuperview() //blackViewを剥がす } ```