summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2021-06-17 09:50:55 +0200
committerAndrej Mihajlov <and@mullvad.net>2021-06-17 09:50:55 +0200
commit3fa72148086744fc8ee4a9e0a33470ffd2b0dab9 (patch)
tree44fa6c93333e7cfce4559c142024d2edd48fb335
parent84cc39ec70d4e7ef25a3941ad60537c347830c61 (diff)
parentda321a25585fd8cde8b116edb1b811feda5df292 (diff)
downloadmullvadvpn-3fa72148086744fc8ee4a9e0a33470ffd2b0dab9.tar.xz
mullvadvpn-3fa72148086744fc8ee4a9e0a33470ffd2b0dab9.zip
Merge branch 'fix-unbalanced-appearance-events'
-rw-r--r--ios/MullvadVPN/RootContainerViewController.swift59
1 files changed, 49 insertions, 10 deletions
diff --git a/ios/MullvadVPN/RootContainerViewController.swift b/ios/MullvadVPN/RootContainerViewController.swift
index dc2cae1025..5ba68f75cf 100644
--- a/ios/MullvadVPN/RootContainerViewController.swift
+++ b/ios/MullvadVPN/RootContainerViewController.swift
@@ -66,6 +66,8 @@ class RootContainerViewController: UIViewController {
private(set) var viewControllers = [UIViewController]()
+ private var appearingController: UIViewController?
+ private var disappearingController: UIViewController?
private var interfaceOrientationMask: UIInterfaceOrientationMask?
var topViewController: UIViewController? {
@@ -122,25 +124,33 @@ class RootContainerViewController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
- topViewController?.beginAppearanceTransition(true, animated: animated)
+ if let childController = topViewController {
+ beginChildControllerTransition(childController, isAppearing: true, animated: animated)
+ }
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
- topViewController?.endAppearanceTransition()
+ if let childController = topViewController {
+ endChildControllerTransition(childController)
+ }
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
- topViewController?.beginAppearanceTransition(false, animated: animated)
+ if let childController = topViewController {
+ beginChildControllerTransition(childController, isAppearing: false, animated: animated)
+ }
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
- topViewController?.endAppearanceTransition()
+ if let childController = topViewController {
+ endChildControllerTransition(childController)
+ }
}
// MARK: - Autorotation
@@ -333,9 +343,12 @@ class RootContainerViewController: UIViewController {
// Finish appearance transition
if shouldHandleAppearanceEvents {
- sourceViewController?.endAppearanceTransition()
- if sourceViewController != targetViewController {
- targetViewController?.endAppearanceTransition()
+ if let sourceViewController = sourceViewController {
+ self.endChildControllerTransition(sourceViewController)
+ }
+
+ if let targetViewController = targetViewController, sourceViewController != targetViewController {
+ self.endChildControllerTransition(targetViewController)
}
}
@@ -378,9 +391,11 @@ class RootContainerViewController: UIViewController {
// Begin appearance transition
if shouldHandleAppearanceEvents {
- sourceViewController?.beginAppearanceTransition(false, animated: shouldAnimate)
- if sourceViewController != targetViewController {
- targetViewController?.beginAppearanceTransition(true, animated: shouldAnimate)
+ if let sourceViewController = sourceViewController {
+ beginChildControllerTransition(sourceViewController, isAppearing: false, animated: shouldAnimate)
+ }
+ if let targetViewController = targetViewController, sourceViewController != targetViewController {
+ beginChildControllerTransition(targetViewController, isAppearing: true, animated: shouldAnimate)
}
}
@@ -505,6 +520,30 @@ class RootContainerViewController: UIViewController {
}
}
+ private func beginChildControllerTransition(_ controller: UIViewController, isAppearing: Bool, animated: Bool) {
+ if appearingController != controller, isAppearing {
+ appearingController = controller
+ controller.beginAppearanceTransition(isAppearing, animated: animated)
+ }
+
+ if disappearingController != controller, !isAppearing {
+ disappearingController = controller
+ controller.beginAppearanceTransition(isAppearing, animated: animated)
+ }
+ }
+
+ private func endChildControllerTransition(_ controller: UIViewController) {
+ if controller == appearingController {
+ appearingController = nil
+ controller.endAppearanceTransition()
+ }
+
+ if controller == disappearingController {
+ disappearingController = nil
+ controller.endAppearanceTransition()
+ }
+ }
+
}
class RootContainerPushSegue: UIStoryboardSegue {