可视化布局之Storyboard中使用ScrollerView实现分页效果

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
继续之前的storyBoard中使用的分享,今天主要介绍下scrollerView的使用以及分页的实现。

1. ScrollerView的实现

storyBoard中,scrollerView添加并添加约束会报错,因为没有设置它的内容视图控制器的大小。

image.png 我们去除上图中Content Layout Guides,并给他添加内容视图。

image.png 设置内容视图的大小和约束,相当于把这个scroller View撑开,我们设置它的比例

image.png 我们设置屏幕宽度的3倍,并设置分页效果

image.png

2. 内容视图的实现

我们添加页面1,设置它的上下左间距为0,宽度为屏幕宽

image.png 同理页面2,设置它的上下左间距为0,宽度等于页面1.

image.png 页面3,直接设置它的上下左右间距为0

image.png 运行下,具有分页的效果

image.png

3.头部按钮实现

我们继续实现头部按钮点击切换,首先我们创建3个按钮并设置它的可选状态下的标题和颜色

image.png 我们设置等分的约束,首先距中显示则

image.png 左边的button相当于0.5,右边的按钮相当于1.5.我们可以把屏幕分为4份

image.png 设置对应的比例即可

image.png 我们设置按钮下的下划线跟随button点击移动的效果

image.png

4. 实现按钮点击以及scrollerView滑动的时候切换

我们实现下scrollerView的代理,主要是滑动时按钮下划线跟着移动,结束的滑动的时候设置按钮的根据偏移量选中状态

#pragma mark - UIScrollViewDelegate
//滑动时按钮下划线跟着移动
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    if (scrollView == self.scrollerView && scrollView.contentSize.width > 0) {

        self.bottomLineView.center = CGPointMake(kScreenWidth*scrollView.contentOffset.x/scrollView.contentSize.width*3/4 + kScreenWidth/4, self.bottomLineView.center.y);

    }

}
//结束的滑动的时候设置按钮的根据偏移量选中状态
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

    if (scrollView == self.scrollerView) {

        for (UIView *vi in self.bottomLineView

             .superview.subviews) {

            if ([vi isKindOfClass:[UIButton class]]) {

                UIButton *tempBtn = (UIButton *)vi;

                tempBtn.selected = CGRectGetMidX(self.bottomLineView.frame)-2<CGRectGetMidX(vi.frame) && CGRectGetMidX(self.bottomLineView.frame)+2>CGRectGetMidX(vi.frame);

            }

        }

    }

}
复制代码

实现按钮点击scrillerView进行偏移

- (IBAction)selectAction:(UIButton *)sender {

    

    if (sender.selected) return;

    [self.scrollerView setContentOffset:CGPointMake((CGRectGetMidX(sender.frame)+2)<kScreenWidth/2?0:(CGRectGetMidX(sender.frame)-2)>kScreenWidth/2?kScreenWidth*2:kScreenWidth, 0) animated:YES];

    for (UIButton *btn in sender.superview.subviews) {

        if ([btn isKindOfClass:[UIButton class]]) {

            btn.selected = NO;

        }

    }

    sender.selected = YES;

}
复制代码

最后看下效果

QQ20211011-212435-HD.gif

实际效果还可以,喜欢的话点个赞吧。

猜你喜欢

转载自juejin.im/post/7017799899768946724