WMMenuView(WMPageController)
1.WMPageController
继承自UIViewController
通过代理WMPageControllerDataSource设置数据源
WMPageControllerCachePolicy的缓存策略 对加载的页面进行缓存处理
NSCache用于缓存加载过的VC
WMPageControllerPreloadPolicy可以对ViewController进行预加载
//过程为
1.init方法初始化 设置参数
init
initWithNibName:bundle:
loadView
viewDidLoad
详见iOS中的各种加载方法(initWithNibName,loadNibNamed,initWi... - 简书
2.//计算vc和和控件的frame
[self wm_calculateSize];
3.//在view上添加ScrollView contensize 为vc的总宽
[self wm_addScrollView];
4.//添加vc道baseVC上
[self wm_addViewControllerAtIndex:self.selectIndex];
//核心代码
//添加VC到BaseVC上
[self addChildViewController:viewController];
CGRect frame = self.childViewFrames.count ? [self.childViewFrames[index] CGRectValue] : self.view.frame;
//设置这个显示的子VC的frame
viewController.view.frame= frame;
[viewControlle rdidMoveToParentViewController:self];
//把这个子VC的view加到scrollview上
[self.scrollView addSubview:viewController.view];
5.记录当前的VC
self.currentViewController = self.displayVC[@(self.selectIndex)];
6.添加MenuView 到view上
[self wm_addMenuView];
[self didEnterController:self.currentViewController atIndex:self.selectIndex];
二 WMStickyPageViewController
WMStickyPageViewController继承自WMPageController
相比较wmpagecontroller sticky多了header部分,由于wmpage的scrollview是menu下面部分 所以为了让headerview和整个页面一起滚动,所以sticky的页面 (整个显示的view)替换成了scrollview,这又涉及到 这个view中的scrollview和展示vc的实现代理的scrollview(tableview)的偏移量的处理(此处不涉及前面的WMScrollview)