我有以下 2 个函数可以添加和删除从容器 View Controller 触发的 subview Controller :
@discardableResult func addChildViewController(withChildViewController childViewController: UIViewController) -> UIViewController {
// Add Child View Controller
addChildViewController(childViewController)
childViewController.beginAppearanceTransition(true, animated: true)
// Add Child View as Subview
view.addSubview(childViewController.view)
// Configure Child View
childViewController.view.frame = view.bounds
childViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
// Notify Child View Controller
childViewController.didMove(toParentViewController: self)
return childViewController
}
@discardableResult func removeChildViewController(withChildViewController childViewController: UIViewController) -> UIViewController {
// Notify Child View Controller
childViewController.willMove(toParentViewController: nil)
childViewController.beginAppearanceTransition(false, animated: true)
// Remove Child View From Superview
childViewController.view.removeFromSuperview()
// Notify Child View Controller
childViewController.removeFromParentViewController()
return childViewController
}
上面的函数是对 UIViewController 的扩展,所以我所做的只是父 View Controller 上的 self.addChildViewController() 和 self.removeChildViewController()。
如何为 View 在离开时被删除和 View 在进入时添加动画?
最佳答案
不同 subview Controller 之间的动画:-
func cycleFromViewController(oldViewController: UIViewController, toViewController newViewController: UIViewController) {
oldViewController.willMove(toParentViewController: nil)
newViewController.view.translatesAutoresizingMaskIntoConstraints = false
self.addChildViewController(newViewController)
self.addSubview(subView: newViewController.view, toView:self.containerView!)
newViewController.view.alpha = 0
newViewController.view.layoutIfNeeded()
UIView.animate(withDuration: 0.5, delay: 0.1, options: .transitionFlipFromLeft, animations: {
newViewController.view.alpha = 1
oldViewController.view.alpha = 0
}) { (finished) in
oldViewController.view.removeFromSuperview()
oldViewController.removeFromParentViewController()
newViewController.didMove(toParentViewController: self)
}
}
在上面,
- oldViewController:- 当前显示的 subview Controller
- newViewController:- 将要添加的新 subview Controller
- containerView:- 显示所有子 Controller 的 View 。
要为 subview 设置动画,您可以根据需要将 transitionFlipFromLeft 替换为可用的 UIViewAnimationOptions 来使用不同类型的动画样式。
关于ios - 在容器 View Controller 中添加/删除时如何为 subview Controller 设置动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44753084/