这里的懒加载是指点击按钮的时候,才从子控制器中取出对应的view,然后addSubview,而不是自定义的控件的get懒加载创建,是为了解决用for循环一下都取出来的细节问题,属于细节优化
总结为:懒加载子控制器的view就是在点击对应按钮的时候才取出来,加进去
点击按钮,开始联动,设置偏移量,滚动完毕,用到谁再加谁
滚动完毕在哪个方法中体现?
在UIView 调用animation方法后,设置完偏移量让其滚动,再加上completion,表示滚动完毕
如何保证添加上去后是对应的位置呢?添加到哪里?
设置frame,若不设置frame,默认起点都是(0,0)都堆到了一起
-(void)addChildVcViewIntoScrollview:(NSUInteger)index
{
UIView *childVcView = self.childViewControllers[index].view;
if(childVcView.window)return;
childVcView.frame = CGRectMake(index * self.scrollview.ts_width, 0, self.scrollview.ts_width, self.scrollview.ts_height);
[self.scrollviewaddSubview:childVcView];
}
一定要考虑默认情况下,添加第一个子控制器的view
这个时候往往会产生这样的疑问:不断的取出来,不断的加进去,会不会重复添加?
答案是不会的,因为同一个内存中的对象,最后只会是一份
frame不必每次都算一遍
为了排除每次都要执行的情况,可以加个判断
if(view.superview) return 或者if(view.window)
还有一种写法,先取出对应的控制器,判断是否调用过viewDidLoad
if(childVc.isViewDidLoader) return;
superview有值,说明已经加到上面了
应用场景:
1.点击按钮,子控制器的view加到了scrollview上进行切换
2.点击按钮,子控制器的view直接加到了父控制器的view上
网友评论