隐藏故事板的切换
Hide switching of storyboards
在我的应用程序中,我有 2 个故事板:Onboarding 和 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)
这个视图工作正常,但仅就一个 Storyboard 而言,它涵盖了应用程序切换屏幕时的所有内容。
但是当我尝试切换情节提要时 - 这个视图被新呈现的情节提要所覆盖。
我也试过用这种方式呈现视图并将其放在前面:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.addSubview(self.containerViewForAnimatedView)
但这也行不通。
如何在转换期间通过呈现自定义创建的视图来隐藏故事板的切换?
如有任何帮助,我们将不胜感激。
只是玩了一下,没有动画或任何特别的东西,但这会给你想要的流程:
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: { [=10=].isKeyWindow })
}
}
在我的应用程序中,我有 2 个故事板:Onboarding 和 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)
这个视图工作正常,但仅就一个 Storyboard 而言,它涵盖了应用程序切换屏幕时的所有内容。
但是当我尝试切换情节提要时 - 这个视图被新呈现的情节提要所覆盖。
我也试过用这种方式呈现视图并将其放在前面:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.addSubview(self.containerViewForAnimatedView)
但这也行不通。
如何在转换期间通过呈现自定义创建的视图来隐藏故事板的切换? 如有任何帮助,我们将不胜感激。
只是玩了一下,没有动画或任何特别的东西,但这会给你想要的流程:
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: { [=10=].isKeyWindow })
}
}