遷移前のViewを透過して表示

下の画面を透かして表示させるのは遷移先の画面背景をclearにすればいけると思ってましたが一つ設定が必要でした。

ダメだったやつ

初期画面

初期画面のUIViewControllerで以下のように普通に遷移をする。

let vc = SecondViewController()
self.present(vc, animated: true, completion: nil)

わかりやすいようにviewの色を緑にしておく

self.view.backgroundColor = .green

遷移先画面

背景を透明にしたら緑がみえるはず!

self.view.backgroundColor = .clear

結果

青いviewはXib上で配置したものです。遷移できていることは確認できますが、背景を透明にしたのに関わらず緑じゃない!

解決策

遷移する前の画面でmodalPresentationStyleの設定を.overCurrentContextで入れてあげればいけました。

let vc = SecondViewController()
vc.modalPresentationStyle = .overCurrentContext
self.present(vc, animated: true, completion: nil)


コード

遷移前の画面

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .green
        
    }
    override func viewDidAppear(_ animated: Bool) {
        let vc = SecondViewController()
     //こいつを入れる!
        vc.modalPresentationStyle = .overCurrentContext
        self.present(vc, animated: true, completion: nil)
    }
}

遷移後の画面

上のViewを閉じる時はdismissで閉じられます。Timerつけて閉じるテストしてました。

class SecondViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = .clear
        Timer.scheduledTimer(withTimeInterval: 3, repeats: false){(_) in
            self.dismiss(animated: true, completion: nil)
        }
    }
}