ios 顶部菜单选择与子控制器联动效果

仿快手顶部菜单与子控制器联动效果,通过懒加载实现加载控制器
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.效果图

第一张

这里写图片描述

简单的联动就实现了,如果想要添加或者修改直接在数组里面添加修改控制器就可以了,可扩展性强

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值