UIScorlView 循环滚动

Posted 刚刚888

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIScorlView 循环滚动相关的知识,希望对你有一定的参考价值。

- (void) createAdScrollView
{
    _view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, 150)];
    [self.view addSubview:_view];
    _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, 150)];
    _scrollView.delegate = self;
    // 设置scrollView的contentSize
    _scrollView.contentSize = CGSizeMake(WIDTH*(self.scrollViewDataArray.count+1), 0);
    _scrollView.pagingEnabled = YES;
    _scrollView.delegate = self;
    
    // 注意这里不需要add,因为在headerView时直接return _scrollView;
     [_view addSubview:_scrollView];
    
    for (int i=0; i<self.scrollViewDataArray.count+1; i++) {
        int y = i;
        if (y == self.scrollViewDataArray.count) {
            y = 0;
        }
        UIButton *button = [ZCControl createButtonWithFrame:CGRectMake(WIDTH*i, 0, WIDTH, 150) title:nil imageName:nil bgImageName:nil target:self method:@selector(buttonClick:)];
//        [button sd_setBackgroundImageWithURL:[NSURL URLWithString:self.scrollViewDataArray[y][@"image_path"]] forState:UIControlStateNormal]; placeholderImage:[UIImage imageNamed:@"recommend_Face"];
        button.tag = 100+i;
        [_scrollView addSubview:button];
    }
    // 添加定时器
    [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(timerClick) userInfo:nil repeats:YES];
    
    
    // 添加小白点
    pageController = [[UIPageControl alloc]initWithFrame:CGRectMake(100, 120, 100, 30)];
    pageController.numberOfPages = self.scrollViewDataArray.count;
    
    // 白色看不清设置成其他颜色
    pageController.pageIndicatorTintColor = [UIColor grayColor];
    
    // pageController虽然是和scrollView并用的,但是并不加载在sc
    [_view addSubview:pageController];
    
    // kvo观察者模式,负责观察某一个对象其中某一个值的变化,如果有新值变化就通知你。需要注意的是,观察者模式需要手动销毁,当前界面销毁并不代表观察者模式也销毁了
    // sc观察的对象,self为响应的对象,path为观察sc其中的一个属性,使用字符串来表示这个属性,要求与属性名保持一致。options为观察值变化为有新的变化的时候,通知我。context上下文
    
    [_scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil];
}
- (void)timerClick{
    // 首先判断_scrollView当前的偏移
    CGPoint point = _scrollView.contentOffset;
    point.x = point.x+WIDTH;
    
    [UIView animateWithDuration:1 animations:^{
        _scrollView.contentOffset = point;
    }completion:^(BOOL finished) {
        CGPoint point1 = _scrollView.contentOffset;
        if (_scrollView.contentOffset.x/WIDTH == self.scrollViewDataArray.count) {
            _scrollView.contentOffset = CGPointZero;
        }
    }];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    // keyPath为观察的那个key也就是属性,object为观察的的那个对象,change为变化的值
    int x = _scrollView.contentOffset.x/320;
    pageController.currentPage = x;
}

 

以上是关于UIScorlView 循环滚动的主要内容,如果未能解决你的问题,请参考以下文章

Recyclerview 滚动在嵌套滚动视图中的片段中不起作用

带有两个列表片段的可滚动布局

jQuery 平滑滚动片段以不同的速度工作

常用python日期日志获取内容循环的代码片段

小程序根据索引滚动指定的位置

如何在滚动视图中设置谷歌地图片段