我正在尝试学习一些新的iOS编程模式.我已经阅读了一些关于在iOS 7中添加的UIViewController转换API的内容.它们看起来很酷但是对于看起来更简单的任务也感觉非常沉重.
考虑这个用例:
我有一个管理“幻灯片”的自定义容器视图控制器.它包含一系列幻灯片视图控制器,用户可以通过点击按钮向前和向后移动它们.
我可以按如下方式实现此过渡:
private func transitionToViewController(viewController: UIViewController,direction: TransitionDirection = .Forward,animated: Bool = true) { currentViewController.willMove(toParentViewController: nil) addChildViewController(viewController) // ... set up frames,other animation prep ... contentContainerView.addSubview(comingView) UIView.animate(duration: 0.5,animations: { // do the animations }) { (finished) in leavingView.removeFromSuperview() self.currentViewController.removeFromParentViewController() viewController.didMove(toParentViewController: self) // final clean up } }
新的转换API将如何改善这一点?据我所知,如果您正在滚动自己的容器视图控制器,这些API使用起来会更加复杂(参见custom-container view controller transitions.
转换API中的值主要用于交互式转换吗?
谢谢你的澄清
解决方法
我认为新的转换API(UIViewControllerTransitioningDelegate和朋友)只是控制器之间视图转换概括的最后一步.
在UIKit的第一个版本中,我们必须使用hack the system transition code才能获得任何自定义转换.多年以后,我们获得了控制器控制功能,可以将视图控制器作为一等公民和create our own interactive transitions进行管理.最后一步是为您可以实现的任何转换提供功能齐全的通用系统API – 这是新的转换API.
新的API可以将转换提取到独立的类中.反过来,这使得最终可以从GitHub下载转换库并将其作为简单的转换委托插入到现有代码中.无需从某个特定的超类派生您的视图控制器,无需使用第三方控制器容器,无需向UIKit类添加扩展.现在转型终于成为UIKit的一流公民.