iOS开发 关于addChildViewController的理解
前言
我之前是做Android开发的接触ios开发不到一个月的时间,所以在有些东理解上会不自觉的向Android方向靠拢。
理解
通过查阅文档以及相关的博客发现addChildViewController跟我们在 Android 接触的 Fragment 很相似。
好处
我们都知道 iOS 开发默认走的模式是 MVC 模式,当然现在还有一些 MVVM MVP 等等模式,但这些模式都是从 MVC 延伸出去的,MVC 是他们的基础。
举个例子如果我们需要在 界面上添加一个比较复杂的 View 并且这个 View 还涉及到其他的业务逻辑处理。如果我们直接通过 View 的方式添加到A 界面上,你有两种方案去处理这个 View 的交互逻辑。
- A 界面处理业务逻辑
- 在 View 里面处理业务逻辑
这两种方案的弊端都很明显,第一种会造成 Controller 非常臃肿,也不利于后面开发者的观看。第二种虽然不会减轻 Controller 的逻辑,但是你把业务逻辑写到 View 里面去不太合适,这很符合 MVC 模式。所以addChildViewController这个方法可以完美解决上述问题,你只需要建一个 新的Controller ,然后业务逻辑写到新的 Controller 里面。
在 Android 开发中 Fragment 也有类似的效果,有甚至整个 App 都是用 Fragment 完成的,Activity 只是个载体。
用法
addChildViewController:是UIViewController的一个方法,用起来还是很简单的
addChildViewController和addSubView同时出现
let childVc = OtherViewController()
addChildViewController(childVc)
self.view.addSubview(childVc.view)
设置子视图的位置
childVc.view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
移除 ChildController
childVc.removeFromParentViewController()
视图切换(如果同时添加了2个 childController)
/**
* from 显示在父视图控制器中的子视图控制器
* to 将要显示的姿势图控制器
* duration 动画时间
* options 动画效果(渐变,从下往上等等,具体查看API)
* animations 转换过程中得动画
* completion 转换完成闭包
*/
self.transition(from: FirstViewController(), to: SecondViewController(), duration: 5, options: UIViewAnimationOptions.curveEaseInOut, animations: nil, completion: nil)
这里面很多参数自己可以调整下试试,动画有很多个,当然也可以自己实现自己的动画。
总结
其实看到这里你就可以去很简单的去实现一个类似网易新闻那种签栏视图切换功能了,就类似我们 Android 里面的 viewpager 里面嵌套 Fragmengt 的实现方法一样。我们可以用 UICollectionView 嵌套ChildViewContrller 来实现类似的效果。
网友评论