iOS自定义滚动条

来源:互联网 发布:淘宝乒乓球店 编辑:程序博客网 时间:2024/06/05 14:30

iOS自定义滚动条

当我在做一个项目时,碰到这么一个问题,那就是如何修改滚动条的颜色和让他一直显示着,并根据滑动而动态的修改它的坐标,一开始我以为是scrollView自己的一些属性就有这个功能,后来搜索了好久,并没有。scrollView本身的那个我是没弄懂如何修改,但是我自己定义了一个imageView来当滚动条,满足自己的需求,下面给大家介绍一下我的做法和思路。。。

我是通过collectionView实现的广告栏,我是先将collectionView本身的滚动条关掉,然后懒加载一个imageview

-(UIImageView *)scrollBar{    if (!_scrollBar) {        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, self.frame.size.height - kScrollBarHeight, kScrollBarWidth, kScrollBarHeight)];        imageView.backgroundColor  = [UIColor redColor];        [self addSubview:imageView];        _scrollBar = imageView;    }    return _scrollBar;}

其中kScrollBarWidth,就是滚动条的宽度,这是我给滚动条定义的一个宏,不过这个宏不是固定的,他用当前屏幕的宽度/传过来的数组的个数来动态修改,这样就可以匹配多种手机,不至于难看。。。
kScrollBarHeight就是滚动条的高度,这个也是一个宏,不过这个我是固定的。

至于怎么让滚动条可以滑动呢,其实也简单,那就是在UIScrollViewDelegate中找到-(void)scrollViewDidScroll:(UIScrollView *)scrollView这个方法,在这个方法里面动态修改滚动条的X坐标。代码如下:

#pragma mark - 滚动时触发-(void)scrollViewDidScroll:(UIScrollView *)scrollView{    [UIView animateWithDuration:0.5 animations:^{        CGPoint offset = self.collectionView.contentOffset;        CGFloat index = offset.x / CGRectGetWidth(self.collectionView.frame);        CGRect frame  = self.scrollBar.frame;        frame.origin.x = index * kScrollBarWidth;        self.scrollBar.frame = frame;    }];}

其中值得注意的是index最好设置成CGFloat类型,因为楼主之前一开始设置成NSInteger类型,滑动广告时,给人带来一种停顿的感觉,但是你设置成CGFloat类型,就不会有这个现象。

效果如下:

这里写图片描述
这里写图片描述

以上就是我自定义的滚动条的做法和思路,希望对你有所帮助!!!!!!!

0 0