先说下这种效果的大致思路吧:首先最底层是一层scrollView,然后在上面放上顶部视图,中间试图,下方视图;下方视图又是一个scrollView可以保证下方视图可以左右滑动,至此大致的结构已经出来了,下面就是通过对scrollView的高度监听设置上滑隐藏,为了保证滑动下方视图的时候也响应上滑隐藏的方法所以需要对下方视图上放的子视图上滑时也进行监听,在此我用的是block(当然代理也是可以的)然后在监听的方法里面进行上滑隐藏顶部的操作。
下面开始上代码了
主控制器的实现功能代码
//主控制器的scrollView代理方法 上滑隐藏在这里实现
// scrollview 减速停止
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
int page = floor(self.bottomScrollView.contentOffset.x / Screen_width) ;
if (scrollView.tag == 30000) {
if (scrollView.contentOffset.y > heightForScroll ) {
[UIView animateWithDuration:0.5 animations:^{
[self.bgScrollView setContentOffset:CGPointMake(0, Screen_width*0.4)];
}];
}else if(heightForScroll > scrollView.contentOffset.y){
[UIView animateWithDuration:0.5 animations:^{
[self.bgScrollView setContentOffset:CGPointMake(0, 0)];
}];
}
}
heightForScroll = scrollView.contentOffset.y;
[UIView animateWithDuration:0.5 animations:^{
self.line.frame = CGRectMake(Screen_width/4*page, 37, Screen_width/4, 2); }];
for (int i = 0; i<4; i++) {
UIButton *bt = [self.view viewWithTag:1000+i];
[bt setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
}
// NSLog(@"rgsrgwergw%d",page);
[[self.view viewWithTag:1000+page] setTitleColor:[UIColor cyanColor] forState:UIControlStateNormal];
}
底部View添加的视图方法
- (void)scrollViewAddView{
for (int i = 0 ; i<4; i++) {
CustomView *ageRedu = [[CustomView alloc]initWithFrame:CGRectMake(Screen_width*i, -5, Screen_width, Screen_height - NavigationBarViewHeight - 50 - 45) WithType:i+1];
[self.bottomScrollView addSubview:ageRedu];
//上滑隐藏在这个block里面实现
ageRedu.scrollViewDidScroll = ^(UIScrollView *bookListScroll){
if (bookListScroll.contentOffset.y < 20) {
[UIView animateWithDuration:0.5 animations:^{
[self.bgScrollView setContentOffset:CGPointMake(0, 0)];
}];
}else {
[UIView animateWithDuration:0.5 animations:^{
[self.bgScrollView setContentOffset:CGPointMake(0, Screen_width*0.4)];
}];
}
};
}
}
本文只是展示了核心功能实现代码。
最后附上效果: