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 來實現類似的效果。