Скрыть переключение раскадровок - PullRequest
0 голосов
/ 03 февраля 2020

В моем приложении у меня есть 2 раскадровки: Включение и Main . Когда пользователь открывает приложение в первый раз - предоставляется Onboarding раскадровка. После этого он нажимает кнопку, и я показываю ему Main Раскадровку с таким кодом:

let storyboard = UIStoryboard(name: "Shop", bundle: nil)
let navigationVc = storyboard.instantiateViewController(withIdentifier: "ShopScreens") as UIViewController
navigationVc.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
self.present(navigationVc, animated: false, completion: nil)

Я хотел создать собственную анимацию, когда пользователь переключает раскадровки. Для этого я создал простое представление, которое я представляю поверх всего этого:

UIApplication.shared.keyWindow?.addSubview(self.containerViewForAnimatedView)

И это представление работает нормально, но только с точки зрения раскадровки, оно охватывает все, в то время как приложение меняет экраны.

Но когда я пытаюсь переключить раскадровки - этот вид покрывается недавно представленной раскадровкой.

Я также попытался представить представление таким образом и вывести его вперед:

let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.addSubview(self.containerViewForAnimatedView)

Но это тоже не сработает.

Как я могу скрыть переключение раскадровок, представляя пользовательский вид во время этого перехода? Был бы признателен за любую помощь.

1 Ответ

1 голос
/ 03 февраля 2020

Просто поиграйте с некоторыми, без анимации или чего-то особенного, но это даст вам поток, который вы хотите:

class ViewController: UIViewController {
    let viiew = UIView.init(frame: UIScreen.main.bounds)

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .red

        DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
            self.viiew.backgroundColor = .blue
            UIApplication.shared.keyWindowInConnectedScenes?.resignKey()
            UIApplication.shared.keyWindowInConnectedScenes?.addSubview(self.viiew)
            self.viiew.layer.zPosition = 1000
        }

        DispatchQueue.main.asyncAfter(deadline: .now() + 4) {
            let vc = ViewController2()
            UIApplication.shared.keyWindowInConnectedScenes?.rootViewController = vc
            DispatchQueue.main.asyncAfter(deadline: .now() + 4) {
                self.viiew.removeFromSuperview()
            }
        }
    }


}

class ViewController2: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .green


    }
}

extension UIApplication {

    var keyWindowInConnectedScenes: UIWindow? {
        return windows.first(where: { $0.isKeyWindow })
    }

}
...