仿快手顶部菜单与子控制器联动效果,通过懒加载实现加载控制器
1.实现顶部栏
//顶部导航Title
-(WY_ScrollButtonView *)scrollButtonView
{
if (!_scrollButtonView)
{
_scrollButtonView = [[WY_ScrollButtonView alloc]init];
_scrollButtonView.buttonTitleArray = @[@"热门", @"推荐",@"同城"];
// _scrollButtonView.tintColor = [MyTool colorWithString:@"37c945"];
_scrollButtonView.defaultcolor = [UIColor blackColor];
_scrollButtonView.isLengthContainTitle = YES;
_scrollButtonView.backgroundColor = [UIColor clearColor];
_scrollButtonView.delete = self;
}
return _scrollButtonView;
}
2.实现顶部栏点击代理
//顶部导航delegate
-(void)buttonSelectedIndex:(NSInteger)index
{
[self.scrollView setContentOffset:CGPointMake(self.view.frame.size.width * index, 0) animated:YES];
}
3.定义控制器切换视图
-(UIScrollView *)scrollView
{
if (!_scrollView)
{
_scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0,0, self.view.frame.size.width, self.view.frame.size.height - 49 - 64)];
_scrollView.bounces = NO;
_scrollView.showsVerticalScrollIndicator = NO;
_scrollView.showsHorizontalScrollIndicator = NO;
_scrollView.backgroundColor = [UIColor colorWithRed:230/255.0 green:230/255.0 blue:230/255.0 alpha:0.1];
_scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 3, 0);
_scrollView.delegate = self;
_scrollView.pagingEnabled = YES;
[self.view addSubview:_scrollView];
}
return _scrollView;
}
4.添加子控制器
//添加子控制器
-(void)addChildViewController
{
NSArray *array = @[@"ViewControllerChaild1",@"ViewControllerChaild2",@"ViewControllerChaild3"];
for (int i = 0; i < array.count; i++)
{
UIViewController *vc = [[NSClassFromString(array[i]) alloc]init];
[self addChildViewController:vc];
}
self.scrollView.contentSize = CGSizeMake(WY_SCREENWIDTH * array.count, 0);
[self scrollViewDidEndDecelerating:self.scrollView];
}
5.实现联动与懒加载控制器
//滑动结束添加view
-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
CGFloat width = self.view.frame.size.width;
CGFloat height = self.scrollView.frame.size.height;
CGFloat offsetX = scrollView.contentOffset.x;
//获取索引
NSInteger scrollIndex = offsetX / width;
[self.scrollButtonView ScrollButtonViewDidScrollToIndex:scrollIndex];
UIViewController *vc = self.childViewControllers[scrollIndex];
if ([vc isViewLoaded]) return;
CGRect rect = CGRectMake(offsetX, 0, width, height);
vc.view.frame = rect;
[vc.view setFrame:rect];
[self.scrollView addSubview:vc.view];
}
//scrollview减速结束时调用主控制器view
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
[self scrollViewDidEndScrollingAnimation:scrollView];
}
6.效果图
简单的联动就实现了,如果想要添加或者修改直接在数组里面添加修改控制器就可以了,可扩展性强