这一篇文章讲解如何实现一个分页控制器,效果图如下:
这是我参考别人的思路(忘记是哪个了)实现的一个框架,使用起来非常简单。
使用:
_pageView = [[BBScrollPageView alloc] initWithFrame:pageViewRect segmentStyle:scrollTitleViewStyle titles:_dataArr childVcs:_childVcs parentViewController:self delegate:self];
[_pageView generate]
;
或者
_pageView = [[BBScrollPageView alloc] initWithFrame:pageViewRect style:scrollTitleViewStyle];
[_pageView setTiltes:_dataArr childVcs:_childVcs parentViewController:self delegate:self];
[_pageView generate];
即创建传入标题数组和控制器数组即可,无需考虑均分问题。
实现思路
BBPageScrollView分为三个部分,一是上面的头部,二是下面页面内容部分,三是总体视图(包含上面头部和下面页面内容)
上面头部我这里使用的是视图上加了一个可以滚动的scrollView,上面的文字则是自定义的label,它的文字大小跟偏移量有关,label自身点击事件以代理的方式通知pageScrollView,在pageSrollView里内容页面的切换;
页面内容我用的也是一个可以滚动的scrollView,其contentSize的宽度为子控制器的个数 * 自身宽度,当滚动时,其偏移量发生变化,将每个子控制器的视图加到scrollView上,视图x值则是视图所在数组的索引 * scrollView.frame.size.width。scrollView的滑动以代理的方式通知pageScrollView,在pageSrollView里更新上面头部的切换
总体视图pageScrollView负责上面二者的交互。
框架结构如下: