Let ContainerView
be the parent container view with two child content views: NavigationView
and ContentView
.
For such kind of transition you can also use UIView.animateWith...
animations.
For example, assume that rootContainerView
is container and contentViewController
currently active controller in container, then
func setContentViewController(contentViewController:UIViewController, animated:Bool = true) {
if animated == true {
addChildViewController(contentViewController)
contentViewController.view.alpha = 0
contentViewController.view.frame = rootContainerView.bounds
rootContainerView.addSubview(contentViewController.view)
self.contentViewController?.willMoveToParentViewController(nil)
UIView.animateWithDuration(0.3, animations: {
contentViewController.view.alpha = 1
}, completion: { (_) in
contentViewController.didMoveToParentViewController(self)
self.contentViewController?.view.removeFromSuperview()
self.contentViewController?.didMoveToParentViewController(nil)
self.contentViewController?.removeFromParentViewController()
self.contentViewController = contentViewController
})
} else {
cleanUpChildControllerIfPossible()
contentViewController.view.frame = rootContainerView.bounds
addChildViewController(contentViewController)
rootContainerView.addSubview(contentViewController.view)
contentViewController.didMoveToParentViewController(self)
self.contentViewController = contentViewController
}
}
// MARK: - Private
private func cleanUpChildControllerIfPossible() {
if let childController = contentViewController {
childController.willMoveToParentViewController(nil)
childController.view.removeFromSuperview()
childController.removeFromParentViewController()
}
}
this will provide u simple fade animations, u can also can try any UIViewAnimationOptions
, transitions etc.