ストーリーボード未使用で開発しています。
実現したいこと
・FirstViewControllerへ遷移する前の1度だけ、
下記コード①の半透明の//blackViewを表示させたい。
その後はもう2度と表示させたくない。
・//blackViewが約0.5秒後に遅れて表示されるので、
これをHogeViewControllerから遷移したら遅れることなく既に表示させておきたい。
その後はもう2度と表示させたくない。
今やっていること
HogeViewControllerから下記コード①のHugaViewControllerへ遷移します。
viewDidAppear内のblackViewが約0.5秒後に遅れて表示され、
そのあとにFirstViewControllerへモーダル遷移します。
コード① class HugaViewController: UIViewController { var db:Firestore! //..省略してます override func viewDidAppear(_ animated: Bool) { //FireStore guard文 let userRef = db.collection("aaa").document("bbb") dataListener = userRef.addSnapshotListener { [unowned self] (docSnapshot, error) in guard let docSnapshot = docSnapshot, docSnapshot.exists else { //blackViewを表示 let window = UIApplication.shared.keyWindow var blackView = UIView() blackView.backgroundColor = UIColor(white: 0, alpha: 0.5) blackView.frame = (window?.frame)! self.navigationController?.view.addSubview(blackView) //モーダル遷移 let modal = FirstViewController(nibName: nil, bundle: nil) let navi = UINavigationController(rootViewController: modal) navi.modalTransitionStyle = .coverVertical self.present(navi, animated: true, completion: nil) return } } }
FirstViewControllerからSecondViewControllerへ、
そこから次はThirdViewControllerへとpush遷移し、
この時db.collection("aaa").document("bbb")へデータが保存される処理をします。
そしてdissmissでコード①のHugaViewControllerに戻ります。
試したこと
コード①の //FireStore guard文 の部分では docSnapshot.existsがelseの時 //モーダル遷移 は実行できているので、
同様にモーダル遷移する前だけblackViewを表示できるのでは?と思いましたが、
HugaViewControllerに戻った後も変わらずblackViewは表示されたままです。
viewWillAppearやviewDidLoadでコード①と同様のコードで試しましたが、
(約0.5秒遅れる所や戻った後も表示されるなど)同じ動作になってしまいます。
回答1件
あなたの回答
tips
プレビュー