Swapping child views in a container view

后端 未结 3 2118
甜味超标
甜味超标 2020-12-04 16:40

Let ContainerView be the parent container view with two child content views: NavigationView and ContentView.

3条回答
  •  南方客
    南方客 (楼主)
    2020-12-04 17:24

    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.

提交回复
热议问题